Ausschließen von Text während der VBA (Excel) RegEx-Suche

Ausschließen von Text während der VBA (Excel) RegEx-Suche

Ich habe eine Funktion innerhalb eines Makros mit regulären Ausdrücken in Excel 2016 (VBA), die alle Zahlen aus dem Text entfernen soll, sodass ich im Grunde nur alphabetische Zeichen erhalte. Der Haken dabei ist, dass diese Zahlen nicht nur Ziffern sind, sondern auch römische Zahlen sein können (nur die römischen Zahlen eins bis vier, also I, II, III und IV). Als Beispiel nehmen wir die folgende Liste möglicher Elemente:

Program Manager 3
Systems Engineer 3
Secretary III 12345
Consultant
IT Instructor 3
Computer Operations Manager 1
User Support Specialist 2
Engineering Tech II 12345
IT Instructor 2
Network Tech 3

Meine Funktion verwendet den folgenden VBA-Reguläre-Ausdruck-Code, um die Ziffern und römischen Zahlen zu ersetzen (um das Kürzen oder Ähnliches mache ich mir an dieser Stelle keine Gedanken):

Public Function RemoveNumbers(Txt As String) As String
    With CreateObject("VBScript.RegExp")
        .Global = True
        .IgnoreCase = True
        .Pattern = "[0-9]|\s[i]+|\s[iv]$"
        RemoveNumbers = .Replace(Txt, "")
    End With
End Function

Im Allgemeinen funktioniert das einwandfrei, allerdings bin ich auf ein Problem gestoßen. Mein RegEx ändert die Phrase falsch.IT-Ausbilder 2und verwandelt es inIT-Ausbilder(wegen dem Leerzeichen und dann dem WortLehrer, das mit einem beginntICHwas dasselbe ist wie die römische Zahl Eins). Ich habe versucht, die Antwort online zu finden und habe viele Variationen getestet, um RegEx dazu zu bringen, die Phrase auszuschließenLehrerin der Suche, aber ich bekomme es nicht zum Laufen. Einige der Muster, die ich versucht habe zu verwenden, sind:

        .Pattern = "\b(!Instructor)\b|[0-9]|\s[i]+|\s[iv]$"

        .Pattern = "\b(!Instructor)\b\w+|[0-9]|\s[i]+|\s[iv]$"

        .Pattern = "(!Instructor\b)|[0-9]|\s[i]+|\s[iv]$"
...etc

Und da ich die römische Ziffer Eins (I) entfernen muss, ist folgender Workaround für mich nicht möglich:

        .Pattern = "[0-9]|\s[i]{2,}|\s[iv]$"

Ist es möglich, eine Zeichenfolge (z. B. „Lehrer“) mithilfe von regulären VBA-Ausdrücken in Excel 2016 von der Suche auszuschließen? Wenn ja, kann mir jemand erklären, wie ich Elemente während eines VBA-RegEx ausschließen kann?

Danke

Antwort1

Ich habe es herausgefunden. Die folgende Syntax funktioniert für mich (viel Ausprobieren):

    .Pattern = "\b(?!(?:Instructor)\b)(?:[0-9]+|\s[i]+|\s[iv]$)\b"

-- BEARBEITET, um die folgenden Details hinzuzufügen --

Ich habe ein weiteres Wort hinzugefügt (dhDie Info) zum RegEx-Ausschluss:

"\b(?!(?:Info|Instructor)\b)(?:[0-9]+|\s[i]+|\s[iv]$)\b"

Details des Musters:

  • \b - Wortgrenze festlegen
  • (?!(?:Info|Instructor)\b) - Null oder ein (?) Ausschluss (!) für die folgenden Wörter. Nicht erfassende Gruppe, weil wir sie nicht wollen. Das \b am Ende ist eine Wortgrenze
  • (?:[0-9]+|\s[i]+|\s[iv]$) - Entspricht einer oder mehreren Ziffern von 0 - 9. Entspricht einem Leerzeichen (\s), gefolgt von einem oder mehreren i-Zeichen. Entspricht einem Leerzeichen, gefolgt von iv ($ bedeutet „Suchen“ am Ende).
  • | = ODER (durchgehend verwendet)
  • \b - Nachfolgende Wortgrenze

-- BEARBEITET, weil das für mich letztendlich am besten funktioniert hat --

        .Pattern = "\b(?:[0-9]+|\s[i]+|\s[iv]+$)\b"

verwandte Informationen