Подтвердить что ты не робот

Lookbehind в regex для VBA?

Есть ли способ сделать отрицательный и положительный lookbehind в регулярном выражении VBA?

Я хочу, чтобы не совпадать, если строка начинается с "A", поэтому в настоящее время я делаю ^ A в начале шаблона, а затем удаляю первый символ соответствия (0). Очевидно, что это не лучший метод!

Я использую объект regExp.

4b9b3361

Ответ 1

VBA предлагает положительные и отрицательные образы, но скорее непоследовательно не выглядит.

Лучший пример использования Regex с VBA, который я видел, - эта статья Патрика Мэтьюза

[Обновлен пример с использованием Execute, а не Replace]

Пока я не совсем понимаю ваше использование, вы можете использовать такую ​​функцию с помощью

  • пропускает любые слова, начинающиеся с A
  • для всех слов, не начинающихся с 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
    

Ответ 2

Как насчет того, чтобы поместить ^ A в не захваченную группу и использовать свойство SubMatches объекта Match для получения вашего сопоставленного значения?