繁体   English   中英

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

[英]Extract House Number and Street Name from string using Python Regex

我是Regex的新手,正在尝试使用它来将地址解析为门牌号和街道。

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

由于我的某些街道字符串将带有连字符的街道地址,因此情况变得有些复杂,在这种情况下,我想将第一个数字放在连字符之前。

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

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

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

到目前为止,我已经能够提取街道编号,包括在带连字符的情况下,但是我不确定如何提取匹配街道编号模式后的街道名称。

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

谢谢您的帮助!

我还在编辑问题以指出破折号不是唯一可以用两个数字分隔街道的字符。 数据中总共有三种情况:

1)第五街123-127

2)123 1/2第五街

3)第五街123和125

在所有这三种情况下,结果应为123 5thSt。

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

>>> 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']

希望这是您要寻找的:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM