在分隔符 VBA 之间的整个字符串片段上查找替换

xyz*_*333 1 regex excel vba replace office365

我有管道分隔的字符串,我需要entire在管道之间的子字符串上查找和替换

所以如果我的字符串看起来像

AAAP|AAA TTT|AAA|000AAA|AAAP|AAA TTT|AAA|000AAA|AAAP|AAA TTT|AAA|AAA

AAA可在字符串中的任何地方。开始和/或结束或多次存在

我想AAAZZZ

我需要的结果:

AAAP|AAA TTT|ZZZ|000ZZZ|AAAP|AAA TTT|ZZZ|000ZZZ|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
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 5

您可以使用

re.Pattern = "(^|\|)" & strFind & "(?![^|])"
RegExpReplaceWord = re.Replace(strSource, "$1" & strReplace)
Run Code Online (Sandbox Code Playgroud)

请参阅(^|\|)AAA(?![^|]) 正则表达式演示。注意它等于(^|\|)AAA(?=\||$)

详情

  • (^|\|) - 捕获组 1:字符串开头或管道字符
  • AAA - 搜索字符串
  • (?![^|])/ (?=\||$)- 前瞻,确保|当前位置的右侧有一个字符串或字符串结尾。

注意:如果您strFind可以包含特殊的正则表达式元字符,请确保使用来自正则表达式和嵌入特殊字符的解决方案对字符串进行转义。

  • 做得很好!:) (2认同)