在分隔符VBA之间的整个字符串片段上查找替换
我有管道分隔的字符串,我需要entire在管道之间的子字符串上查找和替换
所以如果我的字符串看起来像
AAAP|AAA TTT|AAA|000 或AAA|AAAP|AAA TTT|AAA|000或AAA|AAAP|AAA TTT|AAA|AAA
该AAA可在字符串中的任何地方。开始和/或结束或多次存在
我想AAA用ZZZ
我需要的结果:
AAAP|AAA TTT|ZZZ|000或ZZZ|AAAP|AAA TTT|ZZZ|000或ZZZ|AAAP|AAA TTT|ZZZ|ZZZ
我得到的结果
AAAP|ZZZ TTT|ZZZ|000 ...
如何将替换限制为整个子字符串
Sub ExtractSubstringReplace()
Dim strSource, strReplace, strFind, RegExpReplaceWord, r, a
strSource = "AAAP|AAA TTT|AAA|000"
strFind = "AAA"
strReplace = "ZZZ"
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
re.Global = True
re.IgnoreCase = True
re.Pattern = "b" & strFind & "b"
RegExpReplaceWord = re.Replace(strSource, strReplace)
MsgBox RegExpReplaceWord
End Sub
回答
您可以使用
re.Pattern = "(^||)" & strFind & "(?![^|])"
RegExpReplaceWord = re.Replace(strSource, "$1" & strReplace)
请参阅(^||)AAA(?![^|]) 正则表达式演示。注意它等于(^||)AAA(?=||$)。
详情:
(^||)- 捕获组 1:字符串开头或管道字符AAA- 搜索字符串(?![^|])/(?=||$)- 前瞻,确保|当前位置的右侧有一个字符串或字符串结尾。
注意:如果您strFind可以包含特殊的正则表达式元字符,请确保使用来自正则表达式和嵌入特殊字符的解决方案对字符串进行转义。
- nicely done! 🙂