我正在試圖找到所有的浮點數(可能是以 -/+前綴的指數形式)。例如,以下是有效格式:-1.2 +1.2 .2 -3 3E4 -3e5 e-5這個正則表達式無法解析所有有效的浮點數
文本來源包含若干以空格或逗號分隔的數字。我需要使用正則表達式來告訴
- 告訴我們,如果有任何無效的數字(例如1.2 3.2 S3)S3是不是一個有效的
- 列表中的每一個有效的數字
我沒有知道怎麼去(1)完成,但對於(2),我使用boost ::正則表達式和下面的代碼
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());
}
現在,它被正確地顯示一切單號碼,但我不得不運行regex_search一些時間,由於它每次只給一個號碼。那麼,我只是不明白爲什麼regex_search不會給我所有的結果。有沒有辦法一次運行搜索並獲得所有結果?
謝謝。但是對於無斜線版本,上面的代碼仍然只能檢索第一個匹配的數字,而不是所有的數字 – user1285419 2012-03-24 18:22:32
@ user1285419它沒有斜線;它沒有反斜槓。方式不同!如果你逐漸/反覆地調用它,它會返回所有這些。 – tchrist 2012-03-24 18:23:36