我需要在 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(?![^|])
regex demo .注意它等于(^|\|)AAA(?=\||$)
.细节:
(^|\|)
- 捕获组 1:字符串开头或管道字符 AAA
- 搜索字符串 (?![^|])
/(?=\||$)
- 确保存在 |
的前瞻或字符串的结尾紧挨当前位置的右侧。 注意 : 如果你的
strFind
可以包含特殊的正则表达式元字符,请确保使用 Regular Expression and embedded special characters 中的解决方案转义字符串.
关于excel - 在分隔符VBA之间查找整个字符串片段的替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67707053/