Regex 正则表达式以匹配具有相同名称的xml标记
我有3个xml标记,在1个字符串中具有相同的标记名:Regex 正则表达式以匹配具有相同名称的xml标记,regex,vbscript,Regex,Vbscript,我有3个xml标记,在1个字符串中具有相同的标记名: <Name>Case1</Name> <Name>Case2</Name><Name>Case3</Name> Case1 Case2Case3 我想使用正则表达式提取每个节点的内容。这是我到目前为止尝试过的regexp (<Name>)(.*)(<\/Name>) ()(*)() 但这与预期不符。它匹配整个字符串 Case1 Case2C
<Name>Case1</Name> <Name>Case2</Name><Name>Case3</Name>
Case1 Case2Case3
我想使用正则表达式提取每个节点的内容。这是我到目前为止尝试过的regexp
(<Name>)(.*)(<\/Name>)
()(*)()
但这与预期不符。它匹配整个字符串
Case1 Case2Case3
任何帮助都将不胜感激。不要使用正则表达式解析XML/HTML。 改用XML解析器 我鼓励使用XPath() 有关RegEx为什么没有XML解析器的更多信息,请参见: 每个默认值的regexp匹配贪婪(尽可能长的序列)。使用“*?”指定非贪婪匹配:
>> set r = New RegExp
>> r.Pattern = "<Name>(.*?)</Name>"
>> s = "<Name>Case1</Name> <Name>Case2</Name><Name>Case3</Name>"
>> WScript.Echo r.Execute(s)(0).Submatches(0)
>>
Case1
>>
>设置r=newregexp
>>r.Pattern=“(*)”
>>s=“案例1案例2案例3”
>>Echo r.Execute(0)。子匹配(0)
>>
案例1
>>
请考虑使用XML工具(XPath,…)来处理XML数据。
< P>您的正则表达式不能按您的预期工作,因为您使用的是贪婪匹配(<代码> *>代码>),而不是非贪婪匹配(<代码>*<代码> >)。 然而,你根本不知道。使用实际的XML解析器从XML数据结构中提取数据data = "<root><Name>Case1</Name> <Name>Case2</Name><Name>Case3</Name></root>"
Set xml = CreateObject("Msxml2.DOMDocument.6.0")
xml.async = False
xml.loadXML data
If xml.parseError Then
WScript.Echo xml.parseError.reason
WScript.Quit 1
End If
For Each n In xml.SelectNodes("//Name")
WScript.Echo n.text
Next
data=“Case1 Case2Case3”
设置xml=CreateObject(“Msxml2.DOMDocument.6.0”)
xml.async=False
xml.loadXML数据
如果xml.parseError,那么
WScript.Echo xml.parseError.reason
WScript.Quit 1
如果结束
对于xml.SelectNodes(“//名称”)中的每个n
Echo n.text
下一个
我尝试这个正则表达式
<name>((?:(?!</?name[ >]).)*)</name>
((?:(?!]))*)
参见演示:http://regex101.com/r/kP8uF5/22
是。。。这个请考虑解析这些值。