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

标签 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

有人看出我哪里错了吗?

最佳答案

您的正则表达式要求末尾至少有 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/

相关文章:

c# - 正则表达式来替换之前没有特定单词的单词

grails - 使用Groovy初始化JAXBContext时,Grails 3.0.8抛出IllegalAnnotationsException的错误1计数

unit-testing - Spock如何处理Mocked对象的相等性

php - 如何在调用者作用域中设置变量,例如 extract() 函数

audio - 用于从音频流中提取单词(语音)的库?

Python正则表达式获得最接近的匹配而没有重复的内容

php - 如何删除 `//<![CDATA[` 并结束 `//]]>` ?

搜索文本中的 Java RegEx 单引号失败模式

javascript - 如何动态组合两个正则表达式?

grails - Groovy 空检查/返回