熊猫str匹配德国地址

时间:2020-04-15 20:47:32

标签: regex pandas geocoding nominatim

在设计正则表达式以准备要用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ße4 52143 Herzogenrath。我看到的另一个问题是第二个地址,因为它没有街道号码。这就是为什么我要过滤创建一个可以过滤以下结构的正则表达式的原因:

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

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

有什么方法可以将此设计为正则表达式?

1 个答案:

答案 0 :(得分:1)

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

# 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