vba regex:如何在字符串的开头,之间,结尾之间提取精确的重复匹配项

时间:2018-06-28 19:06:06

标签: regex excel-vba vba excel

我很幸运地尝试使用Excel VBA中的RegEx在字符串中提取重复出现的单词。

以下为示例:

我很幸运地尝试使用Excel VBA中的RegEx在字符串中提取重复出现的单词。

以下为示例:

Sub RegExTest()

 Dim re As Object
 Dim el As Object
 Const strText As String = "Fld,Fld,Fld,Fld,Fld,aFld1,bFld,cFld,Fld"
 Debug.Print strText
 With CreateObject("VBScript.RegExp")
  .Global = True
  .MultiLine = False
  .IgnoreCase = False
  .pattern = "(^Fld\,|\,Fld\,|\,Fld$)"
  If .Test(strText) Then
   Set re = .Execute(strText)
  End If
 End With
 For Each el In re
  Debug.Print el
 Next
End Sub

Result:
Fld,Fld,Fld,Fld,Fld,aFld1,bFld,cFld,Fld
Fld,
,Fld,
,Fld,
,Fld

我得到的结果(4个元素)不是我期望的(6个元素)。

我确定这是关于错误的模式定义。

有人可以提供正确模式的帮助吗?

预先感谢

1 个答案:

答案 0 :(得分:1)

这里的问题是您的比赛重叠。我的意思是Fld\,中的逗号已经匹配,因此您的第二个Fld将不匹配\,Fld\,

If you double up your commas you can see that you have the appropriate number of matches

这里的解决方案是use lookaheads to capture your matches.,如果由于某些原因绝对需要结尾逗号,只需将它们附加到相关的匹配项中即可。