2017-08-10 62 views
-3

我正在尋找將代表性瑞士地址拆分爲街道(和街道號碼)和郵政編碼(以及地點名稱)的解決方案。如何將瑞士地址拆分爲Python中的街道和郵政編碼?

推薦,我有以下地址:

'Bahnhofstrasse 1, 8001 Zürich' 

我找的結果是:

street: 'Bahnhofstrasse 1' 
place: '8001 Zürich' 

然而,有時有一個逗號,有時不是。但郵政編碼總是由4位數字組成?

到目前爲止我使用了.split('),但只有當逗號存在時才起作用。

+1

資料中的最後兩個字段總是拉上和城市?我最終會警惕尋找4位數字,你會打到4位數的地址。 – AlG

+0

@ AIG感謝您的評論。對,就是這樣。 「街道」也可能只是一個名字,但最後兩個字段總是郵編和城市。好點,雖然我很確定沒有4位數的街道號碼。 –

回答

3

我不希望城市名稱有位在其中,使用這種模式圓括弧()之間^(.*?),?\s*(\d{4}\D+)$Demo

^    # Start of string/line 
(    # Capturing Group (1) 
    .    # Any character except line break 
    *?   # (zero or more)(lazy) 
)    # End of Capturing Group (1) 
,    # "," 
?    # (zero or one)(greedy) 
\s    # <whitespace character> 
*    # (zero or more)(greedy) 
(    # Capturing Group (2) 
    \d   # <digit 0-9> 
    {4}   # (repeated {4} times) 
    \D   # <character that is not a digit> 
    +    # (one or more)(greedy) 
)    # End of Capturing Group (2) 
$    # End of string/line 
+0

@ alpha bravo非常感謝。這正是我所期待的! –

0
(?P<street>.*?[0-9]+)(?P<place>.*?[0-9]+.*) 

Explaination

一切都是捕獲組 通過加入?P<street>我們給它一個名字街道(這是可選的,但更容易閱讀)。

[0-9]+意味着1個或多個數字

.*?意味着一切(懶惰):零和無限次的匹配比較,如幾次儘可能,擴大根據需要

此信息相結合,使得一個不錯的正則表達式這情況

enter image description here

相關問題