在Groovy中用RegEx划分字符串

时间:2013-08-14 09:26:19

标签: regex string groovy split

好吧,我把xml-response放了很多符号,如下所示:

def xmlString = "<TAG1>1239071ABCDEFGH</TAG1><TAG2>1239071ABCDEFGH</TAG2>"

使用xmlSlurper只保留数字

def node = 
new XmlSlurper().parseText(xmlString)
    def nodelist = [node.tag1.tag2]

此“节点”获得类似“1239071123907112390711239071”的值 我试着把java RegExp用7分开数字

System.out.println(java.util.Arrays.toString( nodelist.node.split("(?<=\G.{7})") ))

我做错了什么?它不起作用

1 个答案:

答案 0 :(得分:1)

假设您有一些有效的xml,如:

def xmlString = """<document>
                  |    <TAG1>1239071ABCDEFGH</TAG1>
                  |    <TAG2>1239071ABCDEFGH</TAG2>
                  |</document>""".stripMargin()

然后你可以得到所有以TAG开头的元素,并且每个元素都修剪掉不是数字的结束字符:

def nodeList = new XmlSlurper().parseText( xmlString )
                               .'**'
                               .findAll { node ->
                                   node.name().startsWith( 'TAG' )
                               }
                               .collect { node ->
                                   it.text().takeWhile { ch ->
                                       Character.isDigit( ch )
                                   }
                               }
此示例中的

nodeList将等于:

assert nodeList == ['1239071', '1239071']

如果您希望将这些数字与包含它们的TAG相关联(假设TAGn标记是唯一的),那么您可以更改为collectEntries

def nodeList = new XmlSlurper().parseText( xmlString )
                               .'**'
                               .findAll { node ->
                                   node.name().startsWith( 'TAG' )
                               }    
                               .collectEntries { node ->
                                   [ node.name(), node.text().takeWhile { Character.isDigit( it ) } ]
                               }


assert nodeList == [TAG1:'1239071', TAG2:'1239071']