正则表达式将城市和州与输入字符串分开

时间:2013-01-17 14:56:58

标签: python regex

我有一些输入字符串。

Houston, TX
(Houston, TX)
South & West (Houston, TX)
(South & West (Houston, TX))

我正在使用这种模式,但它并不适用于所有四种模式。

.*\(*(.*),\s*(.*)\)*

我只想在上面的输入字符串中输出 Houston TX

规则是取出括号内的东西或者如果没有括号那么东西。结果列表中只有2个项目。

3 个答案:

答案 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} =将匹配所有缩写(两个大写字母)