2014-04-05 22 views
2

在紅寶石我有一個這樣的字符串:紅寶石,從字符串的正則表達式提取物價格

str= 43,69 € 

是可能的正則表達式獲得43,69

我曾嘗試用:

/\d+(?:\.\d+)?/ 

但輸出是不正確的:43.0

+0

'/ \ d +?(?:\ d +)/' – devnull

+0

您正在使用的變體將工作,如果小數點分隔符是一個'點'。 – devnull

+0

我想你已經得到了你的答案,但對於我使用的其他正則表達式情況:http://rubular.com/來測試它們。這非常有用。 –

回答

4

這應該工作

/\d+(?:[.,]\d+)?/ 

[.,]部分小數點分隔符相匹配的一個點或一個逗號。如果你確信泰德小數點分隔符將是一個逗號,你可以使用這個:

/\d+(?:,\d+)?/ 
+0

在一個字符類('[[...]')中,您不必轉義點'.',它總是會匹配實際的點。正如你所看到的,'「,」=〜/ [。] /'是'nil'(因爲它只匹配實際的點)。並且管道字符'|'也將匹配一個管道字符('「|」=〜/ [|] /'yield'0'(即在位置0處匹配)),它不會像字符中的OR類。一個字符類已經像一個OR(內部的任何字符)。因此,只需執行'[。,]'而不是'[\。|,]''。 –

+0

感謝丹尼爾爲此精確。我相應地更新了我的答案 – Benj