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

2024-06-01 09:47:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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

我该怎么办?


Tags: 字符串代码namedataleniflinelist
3条回答

假设字符串的格式始终如图所示,则可以执行以下操作:

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

相关问题 更多 >