14

有没有办法在 VBA 正则表达式中进行消极和积极的回顾?

如果字符串以“A”开头,我想不匹配,所以我目前在模式的开头执行 ^A,然后删除 match(0) 的第一个字符。显然不是最好的方法!

我正在使用 regExp 对象。

4

2 回答 2

13

VBA 提供正面和负面的前瞻,但前后不一致。

我见过的将 Regex 与 VBA 结合使用的最佳示例是Patrick Matthews的这篇文章

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
    
于 2012-02-06T01:07:14.580 回答
0

如何将 ^A 放入未捕获的组中并使用 Match 对象的 SubMatches 属性来获取匹配值?

于 2012-02-05T16:50:25.570 回答