Извлечь название города из адресной строки - PullRequest
0 голосов
/ 05 марта 2020

Есть ли способ извлечь название города из строки адреса, которая иногда не соответствует. В большинстве случаев название города является последним словом строки, но не всегда. Например:

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

Поэтому я просто хочу проверить, содержит ли строка адреса одно из ~ 10 возможных названий городов. Если это так, это конкретное название города должно быть напечатано в новом столбце. Кто может помочь мне достичь этого в Excel of R?

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 05 марта 2020

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

Это может, например, привести к:

                                         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

Это может привести к:

                                         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
0 голосов
/ 05 марта 2020

Поместите этот код VBA в обычный модуль:

Public Function ExtractCity(Target As Range) As String

    Dim Cities As Variant
    Dim City As Variant

    Cities = ThisWorkbook.Worksheets("Sheet1").Range("A1:A10")

    For Each City In Cities
        If InStr(Target, City) > 0 Then
            ExtractCity = City
            Exit For
        End If
    Next City

End Function 
  • Поместите свои 10 городов в диапазоне A1:A10 на листе с именем Sheet1.
  • Добавьте свои адреса в ячейки D1:D2.
  • В ячейку E1 введите следующую формулу: =ExtractCity(D1)
0 голосов
/ 05 марта 2020

Вы можете использовать функцию VBA Split(), как в этом простом примере:

Sub test()
Dim Temp As String
Dim LArray() As String
Dim LLArray() As String
Dim Result As String

  Temp = Range("B2").Value
  LArray = Split(Trim(Temp), ",")         # Split the address (the city name seems to be the third entry
                                          # Be cautious: the first item of an array is A(0), the second is A(1) and the third is A(2)
  LLArray = Split(Trim(LArray(2)), " ")   # Once you have the cityname, it may consist of one name
                                          # or it consists of the name, followed by something else, and you just need the first entry (A(0))
  Result = LLArray(0)

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...