2

我有这样的标签出现的字符串(有多个这样的标签)

|{{nts|-2605.2348}}

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

-2605.2348

在原始字符串中

为了更清楚:

假设字符串是:

 number is |{{nts|-2605.2348}}

我想要字符串为:

 number is -2605.2348

我对提升正则表达式和在线阅读很多东西还是很陌生,但无法得到答案,任何帮助将不胜感激

4

1 回答 1

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 生成的更简单、更快的解析器。

于 2012-12-16T23:32:52.173 回答