正则expression式在string中查找和replace

我有几个string,如下所示:

xml=<data><optional><Account>192</Account></optional></data>, submitter=Q102, target=Q10, escalationType=esc, escalationReason=277, feedback=cx req live esc to have us review, adv cx his account is pending, preventable=0, 

我想要做的是在Excel(vb)中写一个正则expression式,以find所有feedback=和之间的文本, preventable和取代所有,用PIPE代替。

这是我迄今为止find的文字:

 (?<=feedback=)(.*)(?=, preventable)/gi 

但是,我不太确定在这一点上要做什么来replaceselect内的文本?

这是运行后的预期string:

  xml=<data><optional><Account>192</Account></optional></data>, submitter=Q102, target=Q10, escalationType=esc, escalationReason=277, feedback=cx req live esc to have us review| adv cx his account is pending, preventable=0, 

这里是我正在使用的正则expression式的链接: https : //regex101.com/r/wR1dL0/2

在regex101你已经select了PCRE风格,但是如果你想使用VBA,你需要selectJavaScript风格。 尤其是,后视是无效的。 也不是模式修饰符,在VBScript(JavaScript)。

一个正则expression式,将按照你的要求匹配:

 ,(?!.*feedback)(?=.*,\s*preventable) 

replacestring将只是PIPE

在VBA中实现UDF的UDF可能是:


 Option Explicit Function CommaToPipeBetween(S As String, StartAt As String, EndAt As String) As String Dim RE As Object Dim sPat As String sPat = ",(?!.*" & StartAt & ")(?=.*,\s*" & EndAt & ")" Set RE = CreateObject("vbscript.regexp") With RE .Global = True .Pattern = sPat .ignorecase = True CommaToPipeBetween = .Replace(S, "|") End With End Function 

UDF假定您不想在EndAt之前replace逗号(如果用0或更多space字符分隔)。 但是如果你愿意的话,你可以改变模式来使事情更加普遍化。