在 VBA (Excel) RegEx 搜尋期間排除文本

在 VBA (Excel) RegEx 搜尋期間排除文本

我在 Excel 2016 (VBA) 中使用正規表示式的巨集內有一個函數,該函數應該從文字中刪除所有數字,以便我基本上只得到字母字元。問題是這些數字不僅可以是數字,還可以是羅馬數字(只包括羅馬數字一到四,即 I、II、III 和 IV)。例如,採用以下可能項目清單:

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

我的函數使用以下 VBA 正規表示式程式碼來替換數字和羅馬數字(此時我不擔心修剪或其他任何事情):

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

一般來說,除了我遇到一個問題之外,這工作正常。我的正規表示式錯誤地改變了短語資訊技術講師2並將其變成IT講師(因為空格,然後是這個詞講師,以一個開頭與羅馬數字一相同)。我嘗試在網上找到答案,並測試了許多變體以使正則表達式排除該短語講師在搜索中,但我無法讓它工作。我嘗試使用的一些模式包括:

        .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

由於我必須刪除羅馬數字一 (I),因此我無法使用以下解決方法:

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

是否可以使用 Excel 2016 VBA 正規表示式將字串(例如 Instructor)排除在搜尋範圍之外?如果是這樣,有人可以指出我如何在 VBA RegEx 期間排除專案的正確方向嗎?

謝謝

答案1

我想到了。以下語法對我有用(大量試驗和錯誤):

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

-- 編輯新增以下詳細資訊 --

我添加了一個額外的字(即資訊) 到正規表示式排除:

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

圖案詳情:

  • \b - 設定字邊界
  • (?!(?:Info|Instructor)\b) - 零個或一個 (?) 排除 (!) 後面的單字。非捕獲組,因為我們不想要它們。末尾的 \b 是單字邊界
  • (?:[0-9]+|\s[i]+|\s[iv]$) - 符合一個或多個 0 - 9 數字。符合一個空格 (\s) 後面接著一個或多個 i 字元。匹配空格後面跟著 iv($ 表示在末尾搜尋)
  • | = OR(通篇使用)
  • \b - 尾隨字邊界

- 已編輯,因為最終,這最適合我 -

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

相關內容