Посмотрите на регулярное выражение для VBA? - PullRequest
14 голосов
/ 05 февраля 2012

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

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

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

Ответы [ 2 ]

11 голосов
/ 06 февраля 2012

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
    
0 голосов
/ 05 февраля 2012

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

...