У меня есть функция внутри макроса, использующая регулярное выражение в Excel 2016 (VBA), которая должна удалить все цифры из текста, чтобы я в основном получал только буквенные символы. Суть в том, что эти цифры не просто цифры, но они также могут быть римскими цифрами (включая римские цифры от 1 до 4, то есть 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
Как правило, это работает хорошо, но я столкнулся с одной проблемой. Мой RegEx неправильно изменяет фразу IT Instructor 2 и превращает ее в ITnstructor (из-за пробела, а затем слова Instructor, которая начинается с I, который совпадает с римской цифрой один). Я попытался найти ответ в Интернете и протестировал множество вариантов, чтобы RegEx исключил фразу « Инструктор» из поиска, но не могу заставить ее работать. Вот некоторые из шаблонов, которые я пытался использовать:
.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
И поскольку мне нужно удалить римскую цифру 1 (I), я не могу использовать следующее в качестве обходного пути:
.Pattern = "[0-9]|\s[i]{2,}|\s[iv]$"
Можно ли исключить строку (например, «Инструктор») из поиска с помощью регулярных выражений VBA в Excel 2016? Если да, может ли кто-нибудь указать мне правильное направление, как исключить элементы во время VBA RegEx?
Спасибо