2010-08-20 91 views
0

我是Python新手。 Python中是否有StringTokenizer?我可以通過字符掃描和複製來完成字符嗎?Python:如何從字符串中提取所需的信息?

我有以下的輸入字符串

data = '123:Palo Alto, CA -> 456:Seattle, WA 789' 

我需要提取此字符串從兩個(市,州)領域。這裏是我寫的代碼

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

是一間的所有城市:和和這些標點符號在其他地方沒有出現過? – Mark 2010-08-20 16:59:29

+0

@Mark:我改變了這個問題。我現在需要(城市,州)領域。是的,這些標點符號出現在其他地方 – Bruce 2010-08-20 17:00:51

+0

789是最後一個錯字,還是模式不重複? – sdolan 2010-08-20 17:05:42

回答

3

我取,假設這個字符串總是被格式化爲按您的例子:

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'] 

作爲一個說明上您的錯誤,空字符串的長度將爲0,因此索引0不存在:

>>> s = "" 
>>> len(s) 
0 

你可以,但是,串聯在Python字符串與+運營商,像這樣:

>>> s += "Some" 
>>> s += " Text" 
>>> print s 
Some Text 
1

假設你總是有如圖所示,你可以做格式化字符串:

cityState = [] 
for line in data.split('->'): 
    cityState.append({'city':city=line.strip().split(',')[0].split(':')[1], 
        'state':state=line.strip().split(',').split(' ')[1]}) 
1

你總是可以使用正則表達式,如果你想:/\d+:(\w+),\s(\w+)/。它不漂亮,但它應該完成工作。假設要匹配的字符串是您的測試字符串。

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) 

語法可能有點偏離,但總體思路是有的。

1

你可以使用正則表達式。這裏是我的醜正則表達式,你可以做的更好

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) 

主要生產

City1=Palo Alto 
State1= CA 
City2=Seattle 
State2=WA 
6
data = '123:Palo Alto, CA -> 456:Seattle, WA 789' 
citys = [] 
for record in data.split("->"): 
    citys.append(
     re.search(r":(?P<city>[\w\s]+),\s*(?P<state>[\w]+)",record) 
     .groupdict() 
    ) 

print citys 

給出:

[{'city': 'Palo Alto', 'state': 'CA'}, {'city': 'Seattle', 'state': 'WA'}]