2

このようなタグが入った文字列があります(このようなタグは複数あります)

|{{nts|-2605.2348}}

Boost正規表現を使用して、上記で入力した文字列全体を削除|{{nts|して置き換えたい}}

-2605.2348

元の文字列

より明確にするために:

文字列が次のようになっているとします。

 number is |{{nts|-2605.2348}}

私は文字列を次のようにしたいと思います:

 number is -2605.2348

私は正規表現を後押しし、オンラインで多くのことを読むのはまったく新しいですが、これに対する答えを得ることができません。助けていただければ幸いです。

4

1 に答える 1

4

それは本当にあなたがどれだけ具体的になりたいかによります。常に正確|{{nts|に削除しますか、それともパイプ、次に{{、任意の数の文字、その後にパイプを削除しますか?または、最後のスペースと数字の最初の部分の間の空白以外のすべてを削除しますか?

これを行うための多くの方法の1つは、次のようになります。

#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 に答える