以下代码用于将第一行中的9转换为a)* 9。 原始字符串不会被最后一行打印。
std::string ss ("1 + (3+2)9 - 2 ");
std::regex ee ("(\\)\\d)([^ ]");
std::string result;
std::regex_replace (std::back_inserter(result), ss.begin(), ss.end(), ee, ")*$2");
std::cout << result;
这是基于一个非常类似的例子:http://www.cplusplus.com/reference/regex/regex_replace/
MS Visual Studio Express 2013。
答案 0 :(得分:2)
我看到两个问题:首先,您的捕获组应该只包含字符串的'9'
部分,第二个您要用于替换的组不是2美元,而是1美元:
std::string ss ("1 + (3+2)9 - 2 ");
static const std::regex ee ("\\)(\\d)");
std::string result;
std::regex_replace (std::back_inserter(result), ss.begin(), ss.end(), ee, ")*$1");
std::cout << result;
输出:
1 +(3 + 2)* 9 - 2
您似乎想要更一般的替代品。
也就是说,只要有一个数字后跟一个开放的paren,例如1(
或一个紧密的paren后跟一个数字,例如)1
。你想要一个数字和paren之间的星号。
在C ++中,我们可以使用regex_replace
执行此操作,但在撰写本文时我们需要其中两个。我们可以把它们连在一起:
std::string ss ("1 + 7(3+2)9 - 2");
static const std::regex ee ("\\)(\\d+)");
static const std::regex e2 ("(\\d+)\\(");
std::string result;
std::regex_replace (std::back_inserter(result), ss.begin(), ss.end(), ee, ")*$1");
result = std::regex_replace (result, e2, "$1*(");
std::cout << result;
输出:
1 + 7 *(3 + 2)* 9 - 2
由于您在another question中询问如何将其转换为也可以捕获空格的一个,所以这里稍作修改以处理数字和paren字符之间的可能空格:
static const std::regex ee ("\\)\\s*(\\d+)");
static const std::regex e2 ("(\\d+)\\s*\\(");