Как ИСКЛЮЧИТЬ любую отдельную букву в начале и конце строки, но все равно получить совпадение, если НИЧЕГО нет - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь отделить адреса от 1 ячейки до других.Я сопоставляю город из большого массива, содержащего все бельгийские города.На данный момент он работает нормально, за исключением такого рода исключения:

В Бельгии у нас есть город под названием «Вкл».Это слово можно найти и в названиях улиц.Поскольку я не могу знать, введет ли пользователь город, за которым следует улица или улица, за которой следует город, я должен отличать одно от другого (я также не могу быть уверен, будут ли использоваться заглавные буквы или нет).

Различие состоит в том, что на «вкл» на улице почти наверняка будет прикреплена буква алфавита, либо в начале, либо в конце.Пример:

'Onderstraat', 'Donderstraat', 'Avenue du Bon'

Я пробовал это:

objRegExp.Pattern = "[^a-zA-ZàáâäÀÁÂÄèéêëÈÉÊËôöÔÖùúûüÙÚÛÜïÏçÇ]" & LCase(vaCitiesA(i)) & "[^a-zA-ZàáâäÀÁÂÄèéêëÈÉÊËôöÔÖùúûüÙÚÛÜïÏçÇ]"

Но когда они ставят город наконец, то он не совпадает, потому что НИЧЕГО не видно после города (пример Schaarbeek в приведенном ниже примере): 'blv Albert II 121a boîte 1, 1030 Schaarbeek'

То, что я хотел бы видеть выше,он найдет Schaarbeek, но с Onderstraat, Donderstraat или av du Bon он не должен совпадать с городом 'On'

1 Ответ

0 голосов
/ 21 декабря 2018

Рабочий код ОП удален из вопроса и размещен в форме ответа:

Dim vaCitiesA As Variant
Dim xSelection As Range
Dim xCity As String
Dim rest As String

vaCitiesA = Array("Hody", "Hour", "Houx", "HOVE", "Hyon", "Impe", "Izel", "Jeuk", "Kain", "Laar", "Lauw", "LEDE", "Leke", "LENS", "Leut", "LIER", "LINT", "Mark", "Mazy", _
    "Mean", "Meer", "Mere", "Meux", "Moen", "Moha", "MONS", "Mont", "Mont", "Muno", "NATO", "NIEL", "Nimy", "OHEY", "Oizy", "OLEN", "OLNE", "Omal", "Onoz", _
    "Orcq", "Oret", "Paal", "PECQ", "PEER", "Perk", "Redu", "Reet", "Roly", "Roux", "RTBF", "Seny", "Soye", "Suxy", "Thon", "Thys", "Velm", "VISE", "Vivy", _
    "Waha", "Ways", "Werm", "ZELE", "ANS", "ATH", "Aye", "Bra", "Eke", "Ere", "Goe", "HAM", "HUY", "Lot", "Mal", "MOL", "Ogy", "Pry", "Roy", _
    "Scy", "SOC", "Soy", "SPA", "Spy", "VRT", "VTM", "AS", "Lo", "My", "On")

Set xSelection = Application.Selection
For Each Rng In xSelection

    Dim allMatches As Object
    Dim objRegExp As Object
    'Initializing an Instance
    Set objRegExp = CreateObject("VBScript.RegExp")
    'Setting the Properties
    With objRegExp
        .Global = True
        .IgnoreCase = True
    End With

    xCity = ""
    rest = Rng.Value


    'a
    rest = Replace(rest, "à", "a")
    rest = Replace(rest, "â", "a")
    rest = Replace(rest, "á", "a")
    rest = Replace(rest, "À", "A")
    rest = Replace(rest, "Â", "A")
    rest = Replace(rest, "Á", "A")
    'e
    rest = Replace(rest, "ë", "e")
    rest = Replace(rest, "é", "e")
    rest = Replace(rest, "è", "e")
    rest = Replace(rest, "ê", "e")
    rest = Replace(rest, "Ë", "E")
    rest = Replace(rest, "É", "E")
    rest = Replace(rest, "È", "E")
    rest = Replace(rest, "Ê", "E")
    'o
    rest = Replace(rest, "ö", "o")
    rest = Replace(rest, "ô", "o")
    rest = Replace(rest, "Ö", "O")
    rest = Replace(rest, "Ô", "O")
    'u
    rest = Replace(rest, "ü", "u")
    rest = Replace(rest, "û", "u")
    rest = Replace(rest, "ù", "u")
    rest = Replace(rest, "ú", "u")
    rest = Replace(rest, "Ü", "U")
    rest = Replace(rest, "Û", "U")
    rest = Replace(rest, "Ù", "U")
    rest = Replace(rest, "Ú", "U")
    'i
    rest = Replace(rest, "ï", "i")
    rest = Replace(rest, "Ï", "I")
    'c
    rest = Replace(rest, "ç", "c")
    rest = Replace(rest, "Ç", "C")
    'special
    rest = Replace(rest, "'", "")
    rest = Replace(rest, "-", " ")

    Text = LCase(rest)

    For i = LBound(vaCitiesA) To UBound(vaCitiesA)
        '''''''''''''''''''''''''''''''''''''
    objRegExp.Pattern = "(^|[^a-zA-ZàáâäÀÁÂÄèéêëÈÉÊËôöÔÖùúûüÙÚÛÜïÏçÇ])" & LCase(vaCitiesG(i)) & "(?![a-zA-ZàáâäÀÁÂÄèéêëÈÉÊËôöÔÖùúûüÙÚÛÜïÏçÇ])"
    Set allMatches = objRegExp.Execute(Text)
    If objRegExp.Test(Text) Then
        xCity = vaCitiesA(i)
        Exit For
    End If
    ''''''''''''''''''''''''''''''''''''''''
Next i
If xCity <> "" Then
    'for the moment, I choose last match, but could be problematic if there is a short city like 'ON' in front of the street
        x = allMatches.Count - 1
        lCityPos = allMatches(x).FirstIndex
        rest = Replace(rest, Mid(rest, lCityPos + 1, Len(xCity) + 1), "", , 1)
    End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...