vbscript正则表达式,替换两个字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vbscript正则表达式,替换两个字符串相关的知识,希望对你有一定的参考价值。

我有这个xml:

<doc>
<ContactPrimaryEmail></ContactPrimaryEmail>
<ContactAlternateEmail></ContactAlternateEmail> 
<ContactPrimaryMobile>+00xxxxxx</ContactPrimaryMobile>
<ContactAlternateMobile></ContactAlternateMobile> 
</doc>

我想在VBScript中应用正则表达式来替换属性ContactPrimaryMobile的内容“+ 00xxxxxx”,只需更改数字:

<ContactPrimaryMobile>+00xxxxxx</ContactPrimaryMobile>

我是vbscripting的新手,我在创建对象和应用模式方面的技巧是有限的,所以请你帮我转换这个正则表达式在VBScript中使用它:

(?<=\<ContactPrimaryMobile\>)(.*)(?=\<\/ContactPrimaryMobile)

更新我得到这个:

Object不支持此属性或方法:'Submatches'

执行时:

Dim oRE, oMatches
Set oRE = New RegExp
oRE.Pattern = "<ContactPrimaryMobile>(.*?)</ContactPrimaryMobile>"
oRE.Global = True
Set oMatches = oRE.Execute("<doc><ContactPrimaryEmail></ContactPrimaryEmail><ContactAlternateEmail></ContactAlternateEmail><ContactPrimaryMobile>+00xxxxxx</ContactPrimaryMobile><ContactAlternateMobile></ContactAlternateMobile></doc>")
Wscript.Echo oMatches.Submatches(0)
答案

首先,VBScript正则表达式不支持lookbehinds,你需要捕获两个字符串之间的部分。

接下来,您需要通过在.Execute正则表达式匹配后访问匹配对象来获取子匹配,并获取其.Submatches(0)

Dim oRE, oMatches, objMatch
oRE.Pattern = "<ContactPrimaryMobile>(.*?)</ContactPrimaryMobile>"

然后

Set oMatches = oRE.Execute(s)
For Each objMatch In oMatches
  Wscript.Echo objMatch.Submatches(0)
Next

要替换,请使用适当的分组和方法:

oRE.Pattern = "(<ContactPrimaryMobile>).*?(</ContactPrimaryMobile>)"
' and then
s = oRE.Replace(s,"$1SOME_NEW_VALUE$2")
另一答案

我知道你明确地说过并且你有答案但是另一种获得相同目标的方法是使用XML解析器。

option explicit

dim xmldoc
set xmldoc = CreateObject("MSXML2.DomDocument")
xmldoc.load "doc.xml"
dim primaryMobileNode
set primaryMobileNode = xmldoc.selectSingleNode("/doc/ContactPrimaryMobile")
primaryMobileNode.text = "new value"
xmldoc.save "changed-doc.xml"

以上是关于vbscript正则表达式,替换两个字符串的主要内容,如果未能解决你的问题,请参考以下文章

VBScript正则表达式搜索和替换函数

除非被特定标签包围,否则替换字符

java 字符串替换

在 Excel 中使用正则表达式进行查找与替换

在 Excel 中使用正则表达式进行查找与替换

正则表达式的基础语法