使用boost C ++通过正则表达式替换字符串

时间:2012-12-16 19:13:51

标签: c++ regex boost boost-regex

我有字符串,其中有这样的标签(有多个这样的标签)

|{{nts|-2605.2348}}

我想使用boost regex删除|{{nts|}}并替换上面输入的整个字符串

-2605.2348

原始字符串

更清楚地说明:

假设字符串是:

 number is |{{nts|-2605.2348}}

我想要字符串:

 number is -2605.2348

我很擅长提升正则表达式并在线阅读很多内容,但无法得到答案,任何帮助都会受到赞赏

1 个答案:

答案 0 :(得分:4)

这实际上取决于你想要的具体程度。您是要始终准确删除|{{nts|,还是要删除管道,然后是{{,后跟任意数量的字母,后跟管道?或者,您是否要删除最后一个空格与数字第一部分之间不是空白的所有内容?

执行此操作的众多方法之一将是:

#include <iostream>
#include <boost/regex.hpp>

int main()
{
    std::string str = "number is |{{nts|-2605.2348}}";
    boost::regex re("\\|[^-\\d.]*(-?[\\d.]*)\\}\\}");
    std::cout << regex_replace(str, re, "$1") << '\n';
}

在线演示:http://liveworkspace.org/code/2B290X

但是,由于您正在使用boost,请考虑使用boost.spirit生成的更简单,更快速的解析器。