2016-06-23 23 views
2

我有一個數字中的以下類型的字符串:提取號碼時髦

(12 - 17) 
(4.5 - 5.5) 
(4 - 10) 

我的代碼,適用於前兩個例子是這樣的:

def numbers=range=~/\d{1,3}.?\d{1,2}?/ 

哪裏用於數字的結果是:

[12,17] 
[4.5,5.5] 

,但最後只有 [10]它沒有得到4

有沒有人看到我錯了?

回答

3

你的正則表達式需要至少2個整數數字。看:\d{1,3}匹配1到3位數,.?匹配任何字符,但換行符1或0次(可選)和\d{1,2}?匹配1或2位數({1,2}?懶惰限制量詞的版本,意味着它將匹配少數數字儘可能返回有效的匹配)。

使用

/\d{1,3}(?:\.\d{1,2})?/ 

regex demo

說明

  • \d{1,3} - 1至3位數
  • (?:\.\d{1,2})? - 1或0的序列的(由於?):
    • \. - 字面週期
    • \d{1,2} - 2或1位數字(這是一個貪婪版限制量詞)。

這裏是一個Groovy demo

def x = "(12 - 17)(4.5 - 5.5)(4 - 10)" 
def res = x.findAll(/\d{1,3}(?:\.\d{1,2})?/) 
println res 

輸出:[12, 17, 4.5, 5.5, 4, 10]