使用groovy检索字符串部分的更好方法

时间:2013-11-29 13:36:03

标签: regex groovy

我有一个像这样的文件名列表:

"XX111NO_1_myText.txt"
"AABBBAAABBB_25_myHtml.html"
"VVHHY_6_myLog.log"

我想只检索这些字符串的特定部分:

"myText"
"myHtml"
"myLog"

我实现了这段代码及其工作:

def fileName = "XX111NO_1_myText.txt"

fileName = fileName.substring( fileName.lastIndexOf(fileName.find(/_[1-9]+_/))+fileName.find(/_[1-9]+_/).length() , fileName.lastIndexOf(".") ) 

assert fileName == "myText"

有没有更好的方法来执行此任务?例如,仅使用正则表达式

由于

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式:

def names = [ "XX111NO_1_myText.txt",
              "AABBBAAABBB_25_myHtml.html",
              "VVHHY_6_myLog.log",
              "bad.data" ]

def matches = names.collect {
    ( it =~ /^.+_(\S+)\.\S+$/ ).with { m ->
        m.matches() ? m[ 0 ][ 1 ] : null
    }
}

assert matches == [ 'myText', 'myHtml', 'myLog', null ]