Regex 如何在groovy中使用扩展正则表达式分组?

Regex 如何在groovy中使用扩展正则表达式分组?,regex,groovy,Regex,Groovy,我有一个sed命令,可以从Coverlet的代码覆盖率HTML报告中提取一个数字: sed -rn 's/(<tr><th>Branch coverage:<\/th><td>([0-9]+.?[0-9]+)%<\/td><\/tr>)+/\2/p' /output/report/index.htm 这是失败的groovy代码: def regex = /(<tr><th>Branch covera

我有一个
sed
命令,可以从Coverlet的代码覆盖率HTML报告中提取一个数字:

sed -rn 's/(<tr><th>Branch coverage:<\/th><td>([0-9]+.?[0-9]+)%<\/td><\/tr>)+/\2/p' /output/report/index.htm
这是失败的groovy代码:

def regex = /(<tr><th>Branch coverage:<\/th><td>([0-9]+.?[0-9]+)%<\/td><\/tr>)+/\2/

new File('/tmp/output/report/index.htm').eachLine { line ->
    if ((match = line =~ regex)) {
        println match
    }
}
def regex=/(分支覆盖率:([0-9]+.?[0-9]+)%)+/\2/
新文件('/tmp/output/report/index.htm')。eachLine{line->
if((match=line=~regex)){
打印匹配
}
}
我想我不知道如何摆脱它。

sed-rn的/(分支覆盖率:([0-9]+。?[0-9]+))+/\2/p'/output/report/index.htm包含一个替换命令,该命令带有
-n
选项和
p
标志,这两个标志都用于使用
sed
从行提取特定值

在Groovy中,应该直接使用extracting
.find()
方法,并从匹配结果中获取所需的任何组。下面是一个演示:

String line = '<tr><th>Branch coverage:</th><td>15.50%</td></tr>'
def m = line =~ /(<tr><th>Branch coverage:<\/th><td>([0-9]+(?:\.[0-9]+)?)%<\/td><\/tr>)+/
if(m.find()) {         // If the first match is found
    println m[0][2]    // Show Group 2 value of the first match
} else {
    println 'No match' // Else, print No match
}
String line='分支机构覆盖率:15.50%'
def m=line=~/(分支覆盖率:([0-9]+(?:\.[0-9]+)?)%)+/
if(m.find()){//如果找到第一个匹配项
println m[0][2]//显示第一个匹配项的组2值
}否则{
println'不匹配'//否则,打印不匹配
}
因此,请参见打印
15.50
sed-rn/(分支覆盖率:([0-9]+。?[0-9]+)%)+/\2/p'/output/report/index.htm
包含一个替换命令,其中包含
-n
选项和
p
标志,这两个标志都用于使用
sed
从行中提取特定值

在Groovy中,应该直接使用extracting
.find()
方法,并从匹配结果中获取所需的任何组。下面是一个演示:

String line = '<tr><th>Branch coverage:</th><td>15.50%</td></tr>'
def m = line =~ /(<tr><th>Branch coverage:<\/th><td>([0-9]+(?:\.[0-9]+)?)%<\/td><\/tr>)+/
if(m.find()) {         // If the first match is found
    println m[0][2]    // Show Group 2 value of the first match
} else {
    println 'No match' // Else, print No match
}
String line='分支机构覆盖率:15.50%'
def m=line=~/(分支覆盖率:([0-9]+(?:\.[0-9]+)?)%)+/
if(m.find()){//如果找到第一个匹配项
println m[0][2]//显示第一个匹配项的组2值
}否则{
println'不匹配'//否则,打印不匹配
}

因此,请查看打印
15.50

您应该将图案与替换图案分开。在Groovy中,您只需要不进行替换即可。直接获取组2。您应该将模式与替换分离。在Groovy中,您只需要不替换即可。直接联系第二组。