Посмотрите на regex для VBA?
есть ли способ сделать отрицательный и положительный lookbehind в VBA regex?
Я не хочу совпадать, если строка начинается с "A", поэтому в настоящее время я делаю ^A в начале шаблона, а затем удаляю первый символ match(0). Очевидно, не лучший метод!
Я использую объект regExp.
2 ответов
VBA предлагает положительные и отрицательные lookaheads, но довольно непоследовательно не lookbehind.
лучший пример использования Regex с VBA, который я видел, это в этой статье Патрик Мэтьюс
[обновленный пример с использованием Execute
, а не Replace
]
хотя я не совсем понимаю ваше использование, вы можете использовать такую функцию с
- пропускает все слова, начинающиеся с А
-
для всех слов, не начинающихся с a, он возвращает все со второго символа (используя подматч-шаблон внутри
(
и)
- это частичное совпадение 1 -Sub TestString() MsgBox ReducedText("cfat dcat") MsgBox ReducedText("Sat all over the hat again") End Sub Function ReducedText(strIn As String) As String Dim objRegex As Object Dim objRegMC As Object Dim objRegM As Object Dim strOut As String Set objRegex = CreateObject("vbscript.regexp") With objRegex .IgnoreCase = True 'not needed if matching the whole string .Global = True .Pattern = "\b[^a\s]([a-z]+)" If .test(strIn) Then Set objRegMC = .Execute(strIn) For Each objRegM In objRegMC strOut = strOut & objRegM.submatches(0) & vbNewLine Next ReducedText = strOut Else ReducedText = "Starts with A" End If End With End Function
Как насчет того, чтобы поместить ^A в неперехваченную группу и использовать свойство SubMatches объекта Match для получения вашего сопоставленного значения?