Groovy中的正则表达式。捕获字符串的片段

时间:2014-02-27 11:54:32

标签: regex groovy

给出以下输入:

BGM+220+105961-44+9'
DTM+137:20140121:102'
NAD+BY+0048003479::91'
NAD+SE+0000805406::91'
NAD+DP+0048003479::91'
CUX+2:USD+9'
PIA+1+M1PL05883LOT+":BP::92'
PIA+1+927700077001:VP::91'
PRI+AAA:9:::1:PCE'
SCC+1'
QTY+21:10000:PCE'
DTM+2:11022014:102'
PIA+1+M1PL05883LOT+":BP::92'
PIA+1+927700077001:VP::91'
PRI+AAA:9:::1:PCE'
SCC+1'
QTY+21:20000:PCE'
DTM+2:04022014:102'
UNS+S'
UNT++1'
UNZ+1+10596144'

目标是从第一行捕获:

BGM+220+105961-44+9'

“ - ”和“数字结尾”之间的值。在上面的例子中,它将是“44”。

提前致谢

1 个答案:

答案 0 :(得分:2)

你可以这样做:

text.tokenize( '\n' )  // split it based on newlines
    .head()            // grab the first one
    .find( /-\d+/ )    // find '-44'
    .substring( 1 )    // remove the '-'

实际上,你不需要拆分它,所以只需:

text.find( /-\d+/ )?.substring( 1 )

做同样的事情(因为它是你感兴趣的第一行)

评论后编辑:

要同时获取-周围的数字,您可以执行以下操作:

def (pre,post) = text.find( /\d+-\d+/ )?.tokenize( '-' )
assert pre  == '105961'
assert post == '44'