In 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
В сети демо
Это будет работать в при условии, что названия вашего города являются одним словом. Если бы у вас были такие города, как «Ден Бош» или «Хертогенбос», вы можете использовать другой шаблон:
(?<=, )\D+?(?=( [A-Z]*)?$)
![Regular expression visualization](https://www.debuggex.com/i/STySdgdTvwng1FaK.png)
Это может, например, привести к:
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
Если вы хотите исключить определенные города, вы можете построить шаблон, который включает в себя города в качестве оператора ИЛИ, например:
(?<=, )(Rotterdam|Amsterdam|Den Bosch|'s-Hertogenbosch)(?=.*$)
![Regular expression visualization](https://www.debuggex.com/i/oA2AmFYNG2yzN6zL.png)
Это может привести к:
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