首页 > 解决方案 > 从地址字符串中提取城市名称

问题描述

有没有办法从有时不一致的地址字符串中提取城市名称。大多数情况下,cityname 是字符串的最后一个单词,但并非总是如此。例如:

Streetname 8, 1234 AA, Amsterdam
Streetname 10, 1234 BB, Rotterdam ZH

因此,我只想检查地址字符串是否包含约 10 个可能的城市名称之一。如果是这样,则必须在新列中打印该特定城市名称。谁能帮助我在 R 的 Excel 中实现这一目标?

提前致谢!

标签: rexcel

解决方案


R

df = data.frame(Adres = c('Streetname 8, 1234 AA, Amsterdam','Streetname 10, 1234 BB, Rotterdam ZH'))
df$Stad <- stringr::str_extract(df$Adres, "(?<=, )[A-Za-z]+")
print(df)

印刷:

                                     Adres          Stad
1         Streetname 8, 1234 AA, Amsterdam     Amsterdam
2     Streetname 10, 1234 BB, Rotterdam ZH     Rotterdam

在线演示


这将在您的城市名称是一个单词的情况下起作用。您是否有像“Den Bosch”或“s-Hertogenbosch”这样的城市,您可以使用另一种模式:

(?<=, )\D+?(?=( [A-Z]*)?$)

正则表达式可视化

例如,这可能导致:

                                         Adres             Stad
1             Streetname 8, 1234 AA, Amsterdam        Amsterdam
2         Streetname 10, 1234 BB, Rotterdam ZH        Rotterdam
3 Streetname 10, 1234 BB, 's-Hertogenbosch BRA 's-Hertogenbosch
4        Streetname 10, 1234 BB, Den Bosch BRA        Den Bosch

如果您想排除某些城市,您可以构建一个包含城市作为 OR 语句的模式,例如:

(?<=, )(Rotterdam|Amsterdam|Den Bosch|'s-Hertogenbosch)(?=.*$)

正则表达式可视化

这可能导致:

                                         Adres             Stad
1             Streetname 8, 1234 AA, Amsterdam        Amsterdam
2         Streetname 10, 1234 BB, Rotterdam ZH        Rotterdam
3            Streetname 19, 1234 CC, Almere FL             <NA>
4 Streetname 10, 1234 BB, 's-Hertogenbosch BRA 's-Hertogenbosch
5        Streetname 10, 1234 BB, Den Bosch BRA        Den Bosch

推荐阅读