如何将瑞士地址拆分为 Python 中的街道和邮政编码?

How to split a Swiss address into a street and a zip code in Python?

我正在寻找一种解决方案,将具有代表性的瑞士地址拆分为街道(和门牌号)和邮政编码(和地名)。

建议,我有以下地址:

'Bahnhofstrasse 1, 8001 Zürich'

我要找的结果是:

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

但是,有时有逗号有时没有。但是邮政编码总是由4位数字组成?

到目前为止,我使用了 .split('),但只有在存在逗号时才有效。

我不希望城市名称中包含数字,请使用此模式 ^(.*?),?\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
(?P<street>.*?[0-9]+)(?P<place>.*?[0-9]+.*)

Explaination

圆括号 () 之间的所有内容都是捕获组 通过添加 ?P<street> 我们给它起一个名字 street (这是可选的,但更容易阅读)。

[0-9]+表示1个或多个数字

.*? means everything (lazy): 零次到无限次匹配,尽量少,按需扩展

结合这些信息可以为这种情况创建一个很好的正则表达式