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
。
有沒有人看到我錯了?
我有一個數字中的以下類型的字符串:提取號碼時髦
(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
。
有沒有人看到我錯了?
你的正則表達式需要至少2個整數數字。看:\d{1,3}
匹配1到3位數,.?
匹配任何字符,但換行符1或0次(可選)和\d{1,2}?
匹配1或2位數({1,2}?
是懶惰限制量詞的版本,意味着它將匹配少數數字儘可能返回有效的匹配)。
使用
/\d{1,3}(?:\.\d{1,2})?/
說明:
\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]