0

我有一些输入字符串。

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

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

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

我只希望休斯顿德克萨斯州脱离上述输入字符串。

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

4

3 回答 3

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']
于 2013-01-17T15:06:39.943 回答
2

看看 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 组:匹配单个单词

于 2013-01-17T15:14:47.657 回答
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}= 将匹配所有缩写(两个大写字母)

于 2013-01-17T15:04:04.107 回答