gpt4 book ai didi

c++ - 正则表达式替换方法名称

转载 作者:行者123 更新时间:2023-12-01 14:42:11 29 4
gpt4 key购买 nike

我正在尝试替换给定字符串中所有出现的名称。我正在使用正则表达式,因为在这种情况下简单的子字符串匹配不起作用,我需要匹配完整的单词。
我的问题是我只能匹配空格前后的单词。但是,例如,当字符串后跟空白时,我无法替换字符串,例如:

toReplace()
和:
替换()
我的正则表达式替换方法如下所示:
void replaceWord(std::string &str, const std::string& search, const std::string& replace)
{
// Regular expression to match words beginning with 'search'
// std::regex e ("(\\b("+search+"))([^,. ]*)");
// std::regex e ("(\\b("+search+"))\\b)");
std::regex e("(\\b("+search+"))([^,.()<>{} ]*)");
str = std::regex_replace(str,e,replace) ;
}
为了忽略前导和尾随的非字母数字,正则表达式应该如何?

最佳答案

你需要

  • 使用 std::regex_replace(search, std::regex(R"([.^$|{}()[\]*+?/\\])"), std::string(R"(\$&)"))
  • 转义正则表达式模式中的所有特殊字符
  • 使用 std::regex_replace(replace, std::regex("[$]"), std::string("$$$$")) 转义替换模式中的所有特殊字符(如果您替换为文字 $1 文本,$ 可以设置为 $$ ,因此要替换为双 $ ,我们需要在此处替换 $$$$)456791
  • 明确的词边界 包装你的搜索模式,即 "(\\W|^)("+search+")(?!\\w)
  • 替换时,在替换模式的开头添加$1 以保留空格(如果匹配并使用(\W|^) 模式捕获到第一组)。

  • C++ sample code :
    std::string replaceWord(std::string &str, std::string& search, std::string& replace)
    {
    // Escape the literal regex pattern
    search = std::regex_replace(search, std::regex(R"([.^$|{}()[\]*+?/\\])"), std::string(R"(\$&)"));
    // Escape the literal replacement pattern
    replace = std::regex_replace(replace, std::regex("[$]"), std::string("$$$$"));
    std::regex e("(\\W|^)("+search+")(?!\\w)");
    return std::regex_replace(str, e, std::string("$1") + replace);
    }
    然后,
    std::string text("String toReplace()");
    std::string s("toReplace()");
    std::string r("theReplacement()");
    std::cout << replaceWord(text, s, r);
    // => String theReplacement()

    关于c++ - 正则表达式替换方法名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63637904/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com