如何在 VBA 中使用 RegEx 进行多行任意字符匹配,包括换行符
How to do a multi-line any character match including newline character using RegEx in VBA
我正在尝试使用 VBA 中的正则表达式从 XML 中提取一些数据,方法是匹配元素的开始开始和结束标记,但我什么也没得到。
我可以在 Notepad++ 中使用 <foo>.+?<\/foo>
,但在 VBA 中无法使用 Microsoft Regular Expression 5.5
<foo>
variable data here
-
-
</foo>
这是一个列出所有 <td>
内容的示例:
Sub MatchXMLtags()
Dim xml As String
xml = "<td>a</td><td>b" & vbCrLf & "</td><td>c</td>" & vbCrLf & "<td>d</td>"
Dim match As Object
With CreateObject("VBScript.RegExp")
.pattern = "<td>\s*([\S\s]+?)\s*</td>"
.Global = True
.IgnoreCase = True
.MultiLine = False
' display the content of each td tag
For Each match In .Execute(xml)
Debug.Print match.SubMatches(0)
Next
End With
End Sub
这是因为 . VBA 中不包含换行符。
您可以在模式定义中使用 (.|\n)* 来包含换行符 \n
对于你的例子 <foo>(.|\n)*<\/foo>
如果您不希望在 foo 块之间出现 <
,您也可以使用 <foo>[^<]*<\/foo>
我正在尝试使用 VBA 中的正则表达式从 XML 中提取一些数据,方法是匹配元素的开始开始和结束标记,但我什么也没得到。
我可以在 Notepad++ 中使用 <foo>.+?<\/foo>
,但在 VBA 中无法使用 Microsoft Regular Expression 5.5
<foo>
variable data here
-
-
</foo>
这是一个列出所有 <td>
内容的示例:
Sub MatchXMLtags()
Dim xml As String
xml = "<td>a</td><td>b" & vbCrLf & "</td><td>c</td>" & vbCrLf & "<td>d</td>"
Dim match As Object
With CreateObject("VBScript.RegExp")
.pattern = "<td>\s*([\S\s]+?)\s*</td>"
.Global = True
.IgnoreCase = True
.MultiLine = False
' display the content of each td tag
For Each match In .Execute(xml)
Debug.Print match.SubMatches(0)
Next
End With
End Sub
这是因为 . VBA 中不包含换行符。
您可以在模式定义中使用 (.|\n)* 来包含换行符 \n
对于你的例子 <foo>(.|\n)*<\/foo>
如果您不希望在 foo 块之间出现 <
<foo>[^<]*<\/foo>