我在 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"