繁体   English   中英

在Groovy中用RegExp分割字符串

[英]divide the string with RegExp in Groovy

好吧,我在xml-response中放置了很多符号,像这样:

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

使用xmlSlurper仅保留数字

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

在此“节点”获得类似“ 1239071123907112390711231239071”的值后,我尝试将Java RegExp放入7分隔数字

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

我哪里做错了? 它不起作用

假设您有一些有效的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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM