2012-11-01 60 views
0

我想從用戶字符串中提取兩個數字。我有正則表達式工作,但第二個數字捕捉不夠貪婪!我無法弄清楚如何重新格式化我的需求,我提交我的reg exp任何建議都會很棒!QRegExp提取兩個數字

QRegExp valid_input(".*(-?\\d*\\.?\\d+)[\\s,]+(-?\\d*.?\\d+)[^\d]*"); 
valid_input.setMinimal(true); 

if(valid_input.indexIn(value.toString()) == -1) 
    return false; 

QPointF new_point(valid_input.cap(1).toDouble(), valid_input.cap(2).toDouble()); 

在此先感謝!


示例輸入:156, 264

預期輸出:156264

我的輸出:1562


示例輸入:156.2 264.52

預期輸出:156.2264.52

我的輸出:1562


示例輸入:156.2 264.52)

預期輸出:156.2264.52

我的輸出:1562

+2

如果您要提供一些示例數據以及您的預期捕獲輸出,將有所幫助。 – Chris

回答

1

您的正則表達式在您的示例中正常工作。簡單地不要啓用最小匹配,你會得到預期的結果。

+0

好的...這有點令人尷尬 – Constantin

2

兩點:從manual可以去除導致

  • AFAICS 「*」。和尾隨「[^ \ d] *」
  • setMinimal(true)談論設置正則表達式爲而不是貪婪。

否則(由於缺乏示例數據)您的正則表達式看起來不錯。

http://www.regular-expressions.info/floatingpoint.html顯示

?[ - +] [0-9] * \ [0-9] +

這基本上是你的正則表達式,另外還有可選的加號。? 。

到的替代,可以是將正則表達式拆分成多個簡單的部分:??

([ - +] \ \ d + | [ - +] \ d + \ \ d * | [ - +]?\ d +)

+0

所以我的問題是第二個數字。如果我寫'156,435',我會回到'156'和'4' – Constantin

+1

你嘗試過'setMinimal(false)'嗎? –