如何将瑞士地址拆分为 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]+.*)
圆括号 ()
之间的所有内容都是捕获组
通过添加 ?P<street>
我们给它起一个名字 street (这是可选的,但更容易阅读)。
[0-9]+
表示1个或多个数字
.*?
means everything (lazy): 零次到无限次匹配,尽量少,按需扩展
结合这些信息可以为这种情况创建一个很好的正则表达式
我正在寻找一种解决方案,将具有代表性的瑞士地址拆分为街道(和门牌号)和邮政编码(和地名)。
建议,我有以下地址:
'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]+.*)
圆括号 ()
之间的所有内容都是捕获组
通过添加 ?P<street>
我们给它起一个名字 street (这是可选的,但更容易阅读)。
[0-9]+
表示1个或多个数字
.*?
means everything (lazy): 零次到无限次匹配,尽量少,按需扩展
结合这些信息可以为这种情况创建一个很好的正则表达式