Посмотрите на 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 для получения вашего сопоставленного значения?