是否有一种方法来结合这两个正则表达式?



现在我正在处理以下两个正则表达式替换,我像这样组合替换。是否有办法只调用一次regex_replace来处理更换?

std::string test_string = "whatever";
std::regex reg_num("\"([0-9]+\.{0,1}[0-9]*)\"");
std::regex reg_newline("n+");
return std::regex_replace(std::regex_replace(test_string, reg_num, "$1"), reg_newline, "");

可以使用

std::string test_string = ""1" "1.50"nNew line";
std::regex reg_combined(""([0-9]+\.?[0-9]*)"|n");
std::cout << std::regex_replace(test_string, reg_combined, "$1");

参见c++演示。

如果组1没有参与匹配,则$1反向引用将使用空字符串初始化,因此删除这样的换行是安全的。

模式细节:

  • "-一个"字符(注意你不需要转义)
  • ([0-9]+.?[0-9]*)-组1:一个或多个数字,一个可选的.,然后是零或多个数字(你确定你不需要[0-9]*.?[0-9]+吗?)
  • "- a"char
  • |-或
  • n-换行字符。

最新更新