使用Python Regex从字符串中提取门牌号和街道名称

时间:2015-01-16 18:16:35

标签: python regex

我是Regex的新手,我正试图用它来解析House Number和Street中的地址。

示例:123 Main St - > ['123','Main St']

由于我的一些街道字符串将具有连字符的街道地址,因此我想在连字符之前取第一个数字,这有点复杂。

示例:123-127 Main St - > ['123','Main St']

最后,我需要能够处理以数字开头的街道名称。

最复杂的例子是:123-127 3rd Ave - > ['123','3rd Ave']

到目前为止,我已经能够提取街道号码,包括在连字符方案中,但我不确定如何提取街道名称,这是在匹配街道号码模式之后。

MyString='123-127 Main St'
StreetNum=digit=re.findall('(^\d+)', MyString)

感谢您的帮助!

我也在编辑问题,指出短划线不是唯一可以用两个数字分隔街道的角色。数据中总共出现了三种情况:

1)123-127 5th St

2)123 1/2 5th St

3)123& 125 5th St

在所有这三种情况中,结果应为123 5th St.

3 个答案:

答案 0 :(得分:3)

我假设地址部分必须在最后,并且它恰好有两个单词。

>>> s = '123-127 Main St'
>>> re.findall(r'^\d+|\S+ +\S+$', s)
['123', 'Main St']
>>> re.findall(r'^\d+|\S+ +\S+$', "123-127 3rd Ave")
['123', '3rd Ave']

\S+匹配一个或多个非空格字符。

通过re.split功能,

>>> s = '123-127 Main St'
>>> re.split(r'(?<=\d)(?:-\d+)?\s+', s)
['123', 'Main St']
>>> re.split(r'(?<=\d)(?:-\d+)?\s+', "123 Main St")
['123', 'Main St']
>>> re.split(r'(?<=\d)(?:-\d+)?\s+', "123-127 3rd Ave")
['123', '3rd Ave']

答案 1 :(得分:3)

希望这是你正在寻找的东西:

(\d+).*?\s+(.+)

答案 2 :(得分:1)

(\d+)(?:-\d+(?=\s))?\s(.*)

捕获第一个数字,跳过一个破折号和下一个数字(如果存在),然后捕获空格后的所有内容。

>>> re.match(r'(\d+)(?:-\d+(?=\s))?\s(.*)', '123-127 3rd Ave').groups()
('123', '3rd Ave')