根据 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");
}