【发布时间】:2015-01-23 13:35:20
【问题描述】:
在 Python 3.4 中使用正则表达式,如何从以下文本中提取城市名称?
replacement windows in seattle wa
basement remodeling houston texas
siding contractor new york ny
windows in elk grove village
有时城市名称前面有\sin\s,有时没有。有时它有一个通用词,如“窗户”、“改造”……任何东西。有时末尾没有州全名或州缩写。
是否有一个正则表达式可以捕获上述这些条件?
这是我迄今为止尝试过的,但它只捕获“西雅图”。
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)
【问题讨论】:
-
我认为这通常是不可能的。使用城市名称列表。这些可以很容易地用谷歌等找到。将该列表变成一个集合并在该集合中查找各个标记。
-
@Jarad 一个单词的城市名称是可能的。 regex101.com/r/dZ1iN5/3
-
@tobias_k 我目前是这样做的——城市列表、州缩写、州全称、县、国家。我遇到的问题是某些位置拼写错误,或者不在我的列表中,或者缩写(mpls、stl 等),或者以“fort”或“ft”开头,或者是“{word} village”,或者像“希望”、“在”(对于印第安纳州)等太笼统了。我希望一个通用的正则表达式逻辑适用于每一行,但根据迄今为止的响应,它听起来并不存在。感谢您的意见。
-
嗯,这取决于问题。当然没有正则表达式可以匹配,例如所有美国、日本和非洲城市名称,但对于那些“黄页美国城市名称”,它可能有效。也许有一个适合您的正文的正则表达式,但是这样说您的示例太小了。顺便说一句,似乎位置总是最后一个;你试过只取每行的最后几个词吗?
标签: python regex python-3.x