regex 在正则表达式中查找VBA?

hfyxw5xn  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(115)

有没有一种方法可以在VBA正则表达式中执行负向后看和正向后看?
如果字符串以“A”开头,我不想匹配,所以我目前在模式的开头执行^A,然后删除match(0)的第一个字符。显然不是最好的方法!
我正在使用regExp对象。

1bqhqjot

1bqhqjot1#

VBA提供了前瞻(正向和负向),但并不一致不向后看
我见过的将Regex与VBA结合使用的最好例子是帕特里克马修斯的this article

[使用Execute而不是Replace更新示例]

虽然我不完全清楚你的用法,但你可以使用这样的函数:

  • 它跳过任何以 aA 开头的单词(不区分大小写)。
  • 对于所有不是以 a/A 开头的单词,它返回从第二个字符开始的所有内容。这是通过使用子匹配来实现的(()中的模式是第一个子匹配)。

要了解完整的模式,您可以参考explanation on regex101

Sub TestString()
       MsgBox ReducedText("cfat dcat")
       ' results in:        fat  cat
       MsgBox ReducedText("Sat all over the hat again")
       ' results in:        at      ver  he  at
    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

字符串

v1l68za4

v1l68za42#

把^A放在一个非捕获组中,然后使用Match对象的SubMatches属性来获取匹配值,怎么样?

相关问题