Посмотрите на регулярное выражение для VBA?

Есть ли способ сделать негативные и позитивные взгляды в регулярных выражениях VBA?

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

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

2 ответа

Решение

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
    

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

Другие вопросы по тегам