在设计正则表达式以准备要用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位数字,并且结构始终相同,只是有时缺少街道编号。
有什么方法可以将此设计为正则表达式?
答案 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