我有一些输入字符串。
Houston, TX
(Houston, TX)
South & West (Houston, TX)
(South & West (Houston, TX))
我正在使用这种模式,但它并不适用于所有四种模式。
.*\(*(.*),\s*(.*)\)*
我只想在上面的输入字符串中输出 Houston 和 TX 。
规则是取出括号内的东西或者如果没有括号那么东西。结果列表中只有2个项目。
答案 0 :(得分: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']
答案 1 :(得分:2)
看一下python Regular Expression operations页面 - 我发现在学习如何做这些事情时它很有用。
我不确定你是否想把城市和城市分开状态与否,但您可以使用groups这样做:
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组:匹配一个单词
答案 2 :(得分:1)
>>> 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}
=将匹配所有缩写(两个大写字母)