Tôi mới đến Python. Có một StringTokenizer trong Python? Tôi có thể làm nhân vật bằng cách quét và sao chép ký tự.
Tôi có chuỗi đầu vào sau
data = '123:Palo Alto, CA -> 456:Seattle, WA 789'
Tôi cần trích xuất hai lĩnh vực [thành phố, tiểu bang] từ chuỗi này. Đây là mã tôi đã viết
name_list = []
while i < len[data]]:
if line[i] == ':':
name = ''
j = 0
i = i + 1
while line[i] != '-' and line[i].isnumeric[] == False:
name[j] = line[i] # This line gives error
i = i + 1
j = j + 1
name_list.append[name]
i = i + 1
Tôi nên làm gì?
Hỏi ngày 20 tháng 8 năm 2010 lúc 16:55Aug 20, 2010 at 16:55
4
data = '123:Palo Alto, CA -> 456:Seattle, WA 789'
citys = []
for record in data.split["->"]:
citys.append[
re.search[r":[?P[\w\s]+],\s*[?P[\w]+]",record]
.groupdict[]
]
print citys
Gives:
name_list = []
while i < len[data]]:
if line[i] == ':':
name = ''
j = 0
i = i + 1
while line[i] != '-' and line[i].isnumeric[] == False:
name[j] = line[i] # This line gives error
i = i + 1
j = j + 1
name_list.append[name]
i = i + 1
0Đã trả lời ngày 20 tháng 8 năm 2010 lúc 17:25Aug 20, 2010 at 17:25
Nick Tnick tNick T
24.9k11 Huy hiệu vàng79 Huy hiệu bạc118 Huy hiệu đồng11 gold badges79 silver badges118 bronze badges
Tôi thực hiện, giả sử chuỗi luôn được định dạng theo ví dụ của bạn:
import re
data = '123:Palo Alto, CA -> 456:Seattle, WA 789'
name_list = []
r = re.compile["[\s?\d]|:"]
name_list += r.sub["", data].split[" ->"]
print name_list # Prints ['Palo Alto, CA', 'Seattle, WA']
Như một lưu ý về lỗi của bạn, chuỗi trống sẽ có độ dài 0, vì vậy chỉ mục 0 không tồn tại:
>>> s = ""
>>> len[s]
0
Tuy nhiên, bạn có thể kết nối các chuỗi trong Python với toán tử
name_list = []
while i < len[data]]:
if line[i] == ':':
name = ''
j = 0
i = i + 1
while line[i] != '-' and line[i].isnumeric[] == False:
name[j] = line[i] # This line gives error
i = i + 1
j = j + 1
name_list.append[name]
i = i + 1
1, như vậy:>>> s += "Some"
>>> s += " Text"
>>> print s
Some Text
Đã trả lời ngày 20 tháng 8 năm 2010 lúc 17:14Aug 20, 2010 at 17:14
Eldarerathiseldarerathiseldarerathis
34,9k10 Huy hiệu vàng89 Huy hiệu bạc93 Huy hiệu Đồng10 gold badges89 silver badges93 bronze badges
Bạn luôn có thể sử dụng một biểu thức thông thường, nếu bạn muốn:
name_list = []
while i < len[data]]:
if line[i] == ':':
name = ''
j = 0
i = i + 1
while line[i] != '-' and line[i].isnumeric[] == False:
name[j] = line[i] # This line gives error
i = i + 1
j = j + 1
name_list.append[name]
i = i + 1
2. Nó không đẹp, nhưng nó sẽ hoàn thành công việc. Giả sử chuỗi để khớp là chuỗi kiểm tra bạn đã có.import re
for s in string_to_match.split["->"]:
m = re.match[r"\d+:[\w+],\s[\w+]", s]
city = m.group[1]
state = m.group[2]
Cú pháp có thể là một chút tắt, nhưng ý tưởng chung là có.
Đã trả lời ngày 20 tháng 8 năm 2010 lúc 17:09Aug 20, 2010 at 17:09
PatpatPat
2.2033 huy hiệu vàng24 Huy hiệu bạc33 Huy hiệu đồng3 gold badges24 silver badges33 bronze badges
Giả sử rằng bạn luôn có chuỗi được định dạng như hiển thị bạn có thể làm:
cityState = []
for line in data.split['->']:
cityState.append[{'city':city=line.strip[].split[','][0].split[':'][1],
'state':state=line.strip[].split[','].split[' '][1]}]
Đã trả lời ngày 20 tháng 8 năm 2010 lúc 17:04Aug 20, 2010 at 17:04
Davedavedave
12.2k10 Huy hiệu vàng42 Huy hiệu bạc58 Huy hiệu Đồng10 gold badges42 silver badges58 bronze badges
Bạn có thể sử dụng Regex. Đây là regex xấu xí của tôi, bạn có thể làm tốt hơn
inputStr = '123:Palo Alto, CA -> 456:Seattle, WA 789';
m = re.search['.*:[.*],[.*]->.*:[.*],\s*[\S{2}]', inputStr]
print "City1=" + m.group[1]
print "State1=" + m.group[2]
print "City2=" + m.group[3]
print "State2=" + m.group[4]
Sản xuất
City1=Palo Alto
State1= CA
City2=Seattle
State2=WA
Đã trả lời ngày 20 tháng 8 năm 2010 lúc 17:10Aug 20, 2010 at 17:10
Bwawokbwawokbwawok
14.4K7 Huy hiệu vàng31 Huy hiệu bạc43 Huy hiệu đồng7 gold badges31 silver badges43 bronze badges