RegEx在VBScript中提取xml节点之间的数据

wkyowqbh  于 2023-03-24  发布在  其他
关注(0)|答案(2)|浏览(92)

首先,我已经阅读了所有与上述标题匹配的参考文献,但似乎没有一个能回答我的简单要求。我必须使用正则表达式模式,因为我需要将其提供给第三方库进行处理。
第1部分:要读取的xml文件是一个简单的project.exe.config文件

<system.serviceModel>[\s\S]*?<\/system.serviceModel>

这将读取节点及其内容,但我只需要返回内容。
第2部分:这应该是如此简单,我不好意思在这样一个受人尊敬的论坛上问.你能推荐一个程序,将a)允许我测试主题文件上的各种正则表达式模式和b)被设计为技术我正则表达式模式在同一时间.我已经支付并安装了RegExBuddy,但程序本身似乎对我感到困惑,更不用说正则表达式本身.

**编辑:**VBscript不支持lookbehind,我使用的是第三方工具,需要使用VBscript。

g0czyy6m

g0czyy6m1#

这可以很简单地使用 positive lookbehind?<=)和 positive lookahead?=)来完成。

(?<=<system.serviceModel>)[\s\S]*?(?=<\/system.serviceModel>)

示例:regex101
正后看将查找特定模式后面的匹配,在这种情况下是<system.serviceModel>,反之亦然,正前看将查找<\/system.serviceModel>模式。
要测试和学习正则表达式,regex101.com是一个很好的地方,它支持多种语言,有一个友好的UI和解释,还有一个很好的调试器

编辑:OP用VBScript编辑了使用正则表达式所需的,VBScript不支持lookbehind,所以afternative使用的是捕获组:

<system.serviceModel>([\s\S]*?)(?=<\/system.serviceModel>)

它也可以在没有前瞻的情况下工作

<system.serviceModel>([\s\S]*?)<\/system.serviceModel>

我不太熟悉VBScript,但它的概念是这样的:

Set regexObj = CreateObject("vbscript.regexp")
regexObj.Pattern = "<system.serviceModel>([\s\S]*?)(?=<\/system.serviceModel>)"
' or <system.serviceModel>([\s\S]*?)<\/system.serviceModel>
Set matchesObj= regexObj.Execute("<system.serviceModel>Something in side the xml tag!</system.serviceModel>")
If matchesObj.Count <> 0 Then
    WScript.Echo(matchesObj(0).Submatches(0))
    ' or matchesObj.Item(0).SubMatches.Item(0) 
    ' to access first submatch group ([\s\S]*?)
End If
4sup72z8

4sup72z82#

您可以使用lookarounds仅捕获内容:

(?<=<system\.serviceModel>)[\s\S]*?(?=<\/system\.serviceModel>)

Try it.

相关问题