根据 a 或正则表达式中的匹配项确定替换字符串
Determining the replace string based on the match in a or regex
我有一个包含 or statement
类似 re2::RE2 regex = "(foo)|(bar)"
的正则表达式
现在,我想将所有 foo
替换为 bar
并将所有 bar
替换为 foo
。
在 python 中,我可以将函数传递给正则表达式函数并执行以下操作:
def determine_replace_string(match: re.Match):
if match.group(2) == "foo":
return "bar"
else:
return "foo"
re.sub(regex, determine_boolean, "some texts to edit foo bar foo bar")
(这将给出:“一些要编辑的文本 bar foo bar foo”)
如何使用 C++ 中的 RE2 库实现此目的?
PS: 我不能使用两个全局替换,因为第二个会还原第一个所做的更改。
我能给你的最接近的答案就是这个。有 std::regex_replace 但它不能交换组。所以我只使用三步交换方法。
可能不是最快的方法,但可读性很强(没有如果)
#include <cassert>
#include <string>
#include <regex>
int main()
{
std::string str{ "puzzlefoobarfoobarpuzzle" };
str = std::regex_replace(str, std::regex("foo"), "###"); // ### some unique token
str = std::regex_replace(str, std::regex("bar"), "foo");
str = std::regex_replace(str, std::regex("###"), "bar");
assert(str == "puzzlebarfoobarfoopuzzle");
}
我有一个包含 or statement
类似 re2::RE2 regex = "(foo)|(bar)"
现在,我想将所有 foo
替换为 bar
并将所有 bar
替换为 foo
。
在 python 中,我可以将函数传递给正则表达式函数并执行以下操作:
def determine_replace_string(match: re.Match):
if match.group(2) == "foo":
return "bar"
else:
return "foo"
re.sub(regex, determine_boolean, "some texts to edit foo bar foo bar")
(这将给出:“一些要编辑的文本 bar foo bar foo”)
如何使用 C++ 中的 RE2 库实现此目的?
PS: 我不能使用两个全局替换,因为第二个会还原第一个所做的更改。
我能给你的最接近的答案就是这个。有 std::regex_replace 但它不能交换组。所以我只使用三步交换方法。 可能不是最快的方法,但可读性很强(没有如果)
#include <cassert>
#include <string>
#include <regex>
int main()
{
std::string str{ "puzzlefoobarfoobarpuzzle" };
str = std::regex_replace(str, std::regex("foo"), "###"); // ### some unique token
str = std::regex_replace(str, std::regex("bar"), "foo");
str = std::regex_replace(str, std::regex("###"), "bar");
assert(str == "puzzlebarfoobarfoopuzzle");
}