簡體   English   中英

Python:如何從字符串中提取所需的信息?

[英]Python: How to extract required information from a string?

我是Python的新手。 Python中有StringTokenizer嗎? 我可以逐個字符地進行掃描和復制嗎?

我有以下輸入字符串

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

我該怎么辦?

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

我的看法是,假設字符串始終按照您的示例進行格式化:

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

假設您始終將字符串設置為所示格式,則可以執行以下操作:

cityState = []
for line in data.split('->'):
    cityState.append({'city':city=line.strip().split(',')[0].split(':')[1],
                     'state':state=line.strip().split(',').split(' ')[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)

語法可能有點差,但是總的思路就在那里。

您可以使用正則表達式。 這是我難看的正則表達式,您可以做得更好

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM