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

标签 excel regex vba replace office365

我需要在 entire 上查找和替换用竖线分隔的字符串管道之间的子串
所以如果我的字符串看起来像AAAP|AAA TTT|AAA|000AAA|AAAP|AAA TTT|AAA|000AAA|AAAP|AAA TTT|AAA|AAAAAA可以在字符串中的任何位置。开始和/或结束或多次存在
我想替换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

最佳答案

您可以使用

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/

    相关文章:

    arrays - 有时不能分配给数组,有时可以

    excel - 编译 Excel VBA 脚本以修改另一个工作簿中的连接属性

    c - 缺少开发 xll 插件的 MSDN 文档?

    php - 正则表达式与php

    python - 根据字母数检索带括号的缩写的定义

    vba - 使用 VBA 和 Oauth2 交换 Google Calendar API 的访问 token 的授权代码

    java - 在java中对文件进行密码保护

    Excel VBA隐藏行

    c++ - 将临时 std::string 传递给 boost::regex_match

    excel - 如何使用另一列的行数自动填充一列?