在groovy中使用正则表达式从字符串中提取数字

时间:2016-06-23 13:09:52

标签: regex groovy extract

我有以下类型的字符串,其中包含数字:

(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

有谁看到我错在哪里?

1 个答案:

答案 0 :(得分:4)

你的正则表达式至少需要2个整数位。看:\d{1,3}匹配1到3位数,.?匹配任何字符,但换行符1或0次(可选)和\d{1,2}?匹配1或2位数({1,2}?是限制量词的 lazy 版本意味着它将匹配尽可能少的数字以返回有效匹配。)

使用

/\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]