在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)
答案 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>")