Python正则表达式用于识别字符串中的城市名称

时间:2015-01-23 13:35:21

标签: python regex python-3.x

在Python 3.4中使用正则表达式,如何从下面的文本中提取城市名称?

replacement windows in seattle wa
basement remodeling houston texas
siding contractor new york ny
windows in elk grove village

有时候城市名称前面有\sin\s,有时它不会。有时候它会有像“' windows'”,“重塑'”等一般词。有时最后没有州名或州名缩写。

是否有一个正则表达式可以捕获上述条件?

这是我迄今为止所尝试的内容,但它只捕获了西雅图。

import re

l = ['replacement windows in seattle wa',
     'basement remodeling houston texas',
     'siding contractor new york ny',
     'windows in elk grove village'
    ]
for i in l:
    m = re.search(r'(?<=\sin\s)(.+)(?=\s(wa|texas|ny))', i)
    m.group(1)

2 个答案:

答案 0 :(得分:2)

正则表达式无法实现您的目标。正则表达式需要字符串模式才能工作在您的情况下,似乎该模式不存在或可以采取无数的形式。

您可以做的是使用搜索高效的数据结构并将字符串拆分为单词。然后,您将浏览每个单词,看看它是否在您的搜索高效数据结构中。

答案 1 :(得分:0)

import re

l = ['replacement windows in seattle wa',
     'basement remodeling houston texas',
     'siding contractor newyork ny',
     'windows in elk grove village']

p = re.compile(r"(\w+)\s(?:(wa | texas | ny | village))", re.VERBOSE)

for words in l:
    print p.search(words).expand(r"\g<1> <-- the code is --> \g<2>")