我是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.
答案 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')