すべての浮動小数点を検索しようとしています(接頭辞が -/+の指数形式である可能性があります)。たとえば、有効な形式は次のとおりです。-1.2 +1.2 .2 -3 3E4 -3e5 e-5この正規表現はすべての有効な浮動小数点数を解析できません
テキストのソースには、スペースまたはコンマで区切られた複数の数字が含まれています。私は任意の無効な番号(例えば1.2 3.2 S3)S3がある場合は教えてくれ
- を伝えるために、正規表現を使用する必要があることは、私がいない持っているすべての単一の有効な番号
有効なもの
wstring strre("[-+]?\\b[0-9]*\\.?[0-9]+(?:[eE][-+]?[0-9]+)?\\b");
wstring src("1.2 -3.4 3.2 3 2 1e-3 3e3");
boost::wregex regexp(strre);
boost::match_results<std::wstring::const_iterator> what;
regex_search(src, what, regexp, boost::match_continuous);
wcout << "RE: " << strre << endl << endl;
wcout << "SOURCE: [" << src << "]" << endl;
for (int i=0; i<what.size(); i++)
wcout << "OUTPUT: [" << wstring(what[i].first, what[i].second) << "]"<< endl;
しかし、このコードは、私に最初の数(1.2)を示します。私もboost :: match_all、boost :: match_default、同じ結果を試してみてください。
追加情報: こんにちは、テストコードで明示的な文字列ではなくテキストから文字列を読み込むので、二重バックスラッシュの問題は心配しないでください。今
wstring strre("[-+]?\\b[0-9]*\\.?[0-9]+(?:[eE][-+]?[0-9]+)?\\b");
boost::wregex regexp(strre);
boost::match_results<std::wstring::const_iterator> what;
wcout << "RE: " << strre << endl << endl;
while (src.length()>0)
{
wcout << "SOURCE: [" << src << "]" << endl;
regex_search(src, what, regexp, boost::match_default);
wcout << "OUTPUT: [" << wstring(what[0].first, what[0].second) << endl;
src = wstring(what[0].second, src.end());
}
に従うようとにかく、私は、コードを変更し、それが正しく、すべて単一の数字を示しているが、私は、一度に1つの番号を与えるため、それにregex_searchいくつかの時間を実行する必要があります。さて、私はregex_searchがなぜ私にすべての結果を与えるのか理解できません。一度検索を実行してすべての結果を戻す方法はありますか?
ありがとうございました。しかし、ノー・スラッシュ・バージョンの場合、上記のコードは、すべてのものではなく最初に一致する番号のみを取り出すことができます – user1285419
@ user1285419スラッシュはありません。バックスラッシュはありません。異なる方法!そして、あなたがそれを漸進的/反復的に呼び出すならば、それはすべてのものを返します。 – tchrist