excel - VBA 正则表达式 - 使用\b 并在单词边界的末尾包含 "-"

标签 excel regex vba

我不熟悉 VBA 中的正则表达式,但必须调试其他人编写的代码。
我了解 \b匹配基于单词边界的位置并排除非单词字符,如 - .
但是,我需要代码来匹配 -在一些字符串中。
例如,
匹配 cats and dogssearch_criteria : i have cats and dogs使用代码:

"\b" & search_criteria & "\b"  
作品。
但是,这并没有匹配:dogs - search_criteria : dogs - sleeping不起作用。search_criteria是一个包含不以 - 结尾的字符串的列表和以 - 结尾的字符串.
像这样:
dogs -  
cats -   
cats and dogs  
houses  
cars  
work -  
我基本上必须更改\b在代码的末尾,但需要帮助:
"\b" & search_criteria & "\b"

最佳答案

这是您需要自适应词边界(我更喜欢使用的术语)的情况。由于您拥有的所有术语都以单词 char 开头,因此您可以继续使用 \b作为您的左侧边界。
右侧边界是 \b (如果最后一个字符是单词字符)或根本没有边界检查,因为您不关心 - 之后是否有单词或非单词字符.
所以,你只需要

Function BuildBoundaryPattern(pattern As String) As String
BuildBoundaryPattern = "\b" & pattern
If Right(pattern, 1) Like "[a-zA-Z0-9_]" Then
    BuildBoundaryPattern = BuildBoundaryPattern & "\b"
End If
End Function
这将为每次检查建立正确的模式。
查看测试子:
Sub TestBBP()
Dim vbRegX As Object, vbRegXMatch As Object, pattern As String
Dim arr() As String: arr = Split("dogs -,cats -,cats and dogs,houses,cars,work -", ",")

For x = 0 To UBound(arr)
  Set vbRegX = New regExp
  vbRegX.pattern = BuildBoundaryPattern(arr(x))
  If vbRegX.Test(arr(x) & " sleeping") Then
    Debug.Print ("'" & arr(x) & "' in '" & arr(x) & " sleeping' matched!")
  End If
  If vbRegX.Test(arr(x) & "Sleeping") Then
    Debug.Print ("'" & arr(x) & "' in '" & arr(x) & " sleeping' matched!")
  End If
  Debug.Print ("------")
Next x
End Sub
输出:
'dogs -' in 'dogs - sleeping' matched!
'dogs -' in 'dogs - sleeping' matched!
------
'cats -' in 'cats - sleeping' matched!
'cats -' in 'cats - sleeping' matched!
------
'cats and dogs' in 'cats and dogs sleeping' matched!
------
'houses' in 'houses sleeping' matched!
------
'cars' in 'cars sleeping' matched!
------
'work -' in 'work - sleeping' matched!
'work -' in 'work - sleeping' matched!
------

关于excel - VBA 正则表达式 - 使用\b 并在单词边界的末尾包含 "-",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69354094/

相关文章:

excel - 将过滤的行复制到另一个工作表

excel - 对 Excel 电子表格中的值进行排序

java - 排除特殊字符的正则表达式

Python正则表达式-获取时间和日期

excel - 你能从 excel 宏运行 .jl 文件吗

excel - 如何在没有循环引用的情况下自动汇总excel中的整列?

小数点前 1 到 9 位数字和小数点后 1 或 2 位数字的正则表达式

excel - CLng 函数返回有趣的值

excel - 在excel中运行宏

vba - 如何使用WorksheetFunction.VLookup错误处理1004错误?