我有以下类型的字符串,其中包含数字:
(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})?/
请参阅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]
关于regex - 使用groovy中的正则表达式从字符串中提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37992636/