簡體   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