Pandas 德国地址的字符串匹配

Pandas str match for German addresses

我在设计正则表达式以准备地址以使用 Nominatim 进行地理编码时遇到了一个非常烦人的问题。我正在使用如下所示的德国地址:

Von-der-Leyen-Platz 1 47506 Neukirchen-Vluyn    
Schildstraße 52531 Übach-Palenberg  
Finkenratherstraße Straße 4a 52134 Herzogenrath 
Format: Street Number Postal code City

我想要实现的是不会出现街道号码后的第一个文字。为此,我使用以下正则表达式:

(\d+).*?\s+(.+)

正在将第三个地址匹配到 4 52134 Herzogenrath。但不是去 Finkenratherstraße 4 52143 Herzogenrath。我看到的另一个问题是第二个地址,因为它没有街道号码。这就是为什么我想过滤创建一个可以过滤以下结构的正则表达式:

Street name {number if available} Postal code (5 digits) City name

邮政编码始终有 5 位数字,结构始终相同,只是有时缺少街道号码。

有没有办法将其设计为正则表达式?

对于您的数据,这可能有效:

# sample data
s = pd.Series(['Von-der-Leyen-Platz 1 47506 Neukirchen-Vluyn',
               'Schildstraße 52531 Übach-Palenberg',
               'Finkenratherstraße Straße 4a 52134 Herzogenrath'])

# extract
s.str.extract(r'(?P<Street>\D+)\s?(?P<Number>\d+\S*)?\s(?P<Postal>\d{5})\s(?P<City>\D+)$')

输出:

                      Street Number Postal              City
0        Von-der-Leyen-Platz     1   47506  Neukirchen-Vluyn
1               Schildstraße    NaN  52531   Übach-Palenberg
2  Finkenratherstraße Straße    4a   52134      Herzogenrath