gpt4 book ai didi

c++ - 非捕获正则表达式结合字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:11:10 25 4
gpt4 key购买 nike

我想编写一个程序,在一个字符串中搜索一个或多个单词。如果找到这些词,我想用其他东西用 regex_replace 替换它们,为此我们简单地用空格“”说。然而,我不想要的是替换可能挡在它们之间的东西。我写了以下几行(使用 Viusal Studio 2015 C++):

#include <iostream>
#include <regex>

using namespace std;

int main()
{
string test{ "Hier drin wird gesucht und auch ersetzt." };
string a{ "drin" };
string b{ "auch" };
regex r( R"(\b)" + a + R"(\b.*\b)" + b + R"(\b)");
string result = regex_replace(test, r, " ");
cout << result << endl;
system("pause");

return 0;
}

我已经为我正在寻找的单词声明了变量,因为出于这个程序的目的,它们来自一个文件。我知道有非 capturng 组的概念,但是如果我替换行

    regex r( R"(\b)" + a + R"(\b.*\b)" + b + R"(\b)");

    regex r( R"(\b)" + a + R"(\b(?:.*)\b)" + b + R"(\b)");

输出还是一样,即

Hier ersetzt.

因此,尽管放置了非捕获组,但两个词之间的所有内容(包括两个词(更多词相同)都会被替换。我想我在搞砸这些团体的事情。上面的表达式我已经试过三组了,结果总是不对。

这里出了什么问题?

最佳答案

请注意,a.*ba(?:.*)b 相同。您需要一个捕获组 (a(.*)b) 并替换为反向引用。此外,如果您计划在 上匹配 多次 出现的模式(如果不是行,但处理整个字符串,将 . 替换为 [\s\S]):

regex r( R"(\b)" + a + R"(\b(.*?)\b)" + b + R"(\b)"); // See (.*?), capturing group
string result = regex_replace(test, r, "$1"); // See $1, backreference to Group 1 contents

参见 C++ demo

关于c++ - 非捕获正则表达式结合字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41302899/

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