我有一些输入字符串。
Houston, TX
(Houston, TX)
South & West (Houston, TX)
(South & West (Houston, TX))
我正在使用这种模式,但它不适用于所有四个。
.*\(*(.*),\s*(.*)\)*
我只希望休斯顿和德克萨斯州脱离上述输入字符串。
规则是取出括号内的东西,或者如果没有括号,就取出东西。结果列表中只有 2 个项目。
我认为我会分两步做到这一点:
in_paren = re.compile(r'(?:\()([^\)\(]+)(?:\))')
match = in_paren.search(ss)
parts = match.group(1) if match else ss
city,state = parts.split(',')
这是一个函数:
>>> def find_city_state(ss):
... match = in_paren.search(ss)
... parts = match.group(1) if match else ss
... return [x.strip() for x in parts.split(',')]
...
>>> for x in ("Houston, TX","(Houston,TX)","South & West (Houston, TX)","(South & West (Houston, TX))"):
... print find_city_state(x)
...
['Houston', 'TX']
['Houston', 'TX']
['Houston', 'TX']
['Houston', 'TX']
看看 python正则表达式操作页面——我发现它在学习如何做这些类型的事情时很有用。
我不确定您是否想将城市和州分开,但您可以使用这样的组来做到这一点:
import re
string = ('Houston, TX ' +
'(San Francisco, CA) ' +
'South & West (Houston, TX) ' +
'(South & West (Houston, TX))')
matches = re.findall("([\w\s]+),\s(\w+)", string)
for match in matches:
print 'City: ' + match[0] + ', State: ' + match[1]
输出:
City: Houston, State: TX
City: San Francisco, State: CA
City: Houston, State: TX
City: Houston, State: TX
正则表达式:
([\w\s]+)
第 1 组:匹配多个带有空格的单词
,\s
逗号后跟一个空格
(\w+)
第 2 组:匹配单个单词
>>> import re
>>> A="Houston, TX (Houston, TX) South & West (Houston, TX) Los Angeles, CA Los Angeles"
>>> re.findall("\w[A-Za-z ]+, [A-Z]{2}",A)
['Houston, TX', 'Houston, TX', 'Houston, TX', 'Los Angeles, CA']
\w
= 将匹配所有以字母开头的名称
[A-Za-z ]+
= 将匹配所有带空格的名称
, [A-Z]{2}
= 将匹配所有缩写(两个大写字母)