Regex 正则表达式以匹配具有相同名称的xml标记

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

我有3个xml标记,在1个字符串中具有相同的标记名:

<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

是。。。这个请考虑解析这些值。