groovy-regex不';行不通

groovy-regex不';行不通,regex,groovy,match,Regex,Groovy,Match,我有这样的字符串: "blabla (label 1 label 2)" "blabla (label 1 2) blabla" 我希望匹配“1”和“2”,并将其替换为“X”,以便: 我有这个代码,但它不能像我想要的那样工作 def result = "blabla (label 1 label 2)" def result = result.findAll(/.+label\s([1-9]).*/) { m -> "X" } 使用而不是findAll: def replaced =

我有这样的字符串:

"blabla (label 1 label 2)"
"blabla (label 1 2) blabla"
我希望匹配“1”和“2”,并将其替换为“X”,以便:

我有这个代码,但它不能像我想要的那样工作

def result = "blabla (label 1 label 2)"
def result = result.findAll(/.+label\s([1-9]).*/) { m -> "X" }
使用而不是
findAll

def replaced = result.replaceAll(/label(?:\s+\d+)+/) { m ->
    m.replaceAll(/\d+/, "X")
}

首先,正则表达式以
*
结尾,它会在第一个标签之后隐藏所有内容

启动
groovysh
,然后运行:

input = "blabla (label 1 label 2)"

input.findAll ( /label\s([1-9])\b/ ) { m -> "X" }

===> [X, X]

如果我有“blabla 1(标签1标签2)”,结果将是“blabla X(标签X标签X)”。这不是我所期望的:结果应该是:“blabla 1(label X label X)”或“blabla 1(label X label X label X)blabla”。谢谢,这对“blabla(label 1 label 2)”有效,但对“blabla(label 12)bla”有效。我有“blabla(label X label X X)blabla”。好的,但我需要像“blabla(label X label X label X label X)”这样的所有输入,而不仅仅是[X,X]。或者我不明白你的答案……是的,但是如果你在正则表达式末尾使用。*,你的findAll()将永远不会匹配“label 2”,因为它将匹配“label 1”。。。以及后面的所有内容,即“标签1标签2”。然后结束。这就是为什么打印输出中只有一个“X”,而不是预期的两个。
input = "blabla (label 1 label 2)"

input.findAll ( /label\s([1-9])\b/ ) { m -> "X" }

===> [X, X]