正则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
字符分隔)。 但是如果你愿意的话,你可以改变模式来使事情更加普遍化。