Soapui - Groovy ReplaceAll正则表达式

时间:2015-11-05 10:39:02

标签: regex groovy soapui

我有一个字符串(myString),其中包含一些xml标签,例如......

<TargetValue>4</TargetValue>
<TargetValue></TargetValue>
<TargetValue>2</TargetValue>

我需要用我使用代码生成的随机数替换标签之间的所有数字

def myRnd = Math.abs(new Random().nextInt() % 10) + 1

我已经尝试了各种replaceAll命令,但似乎无法正确使用正则表达式,因为没有任何东西被替换。有人会知道如何构造正确的replaceAll命令来更新标记之间的所有值

由于

2 个答案:

答案 0 :(得分:1)

尝试:

def str = '''<TargetValue>4</TargetValue>
<TargetValue></TargetValue>
<TargetValue>2</TargetValue>
'''

str.replaceAll(/[0-9]+/) {
    Math.abs(new Random().nextInt() % 10) + 1
}

<强>更新

然后尝试类似的事情:

def str = '''<TargetValue>4</TargetValue>
<TargetValue></TargetValue>
<TargetValue>2</TargetValue>
'''

str.replaceAll(/\<TargetValue\>\d+\<\/TargetValue\>/) {
    '<TargetValue>' + (Math.abs(new Random().nextInt() % 10) + 1) + '</TargetValue>'
}

更新2

正如@tim_yates建议使用XmlSlurper而不是正则表达式更好,但是你需要一个格式良好的xml来解析,所以在你的例子中你的xml需要一个根节点才能很好地形成。然后,您可以使用XmlSlurper使用正则表达式执行相同操作:

def str = '''<root>
<TargetValue>4</TargetValue>
<TargetValue></TargetValue>
<TargetValue>2</TargetValue>
</root>
'''

def xml = new XmlSlurper().parseText(str)
xml.'**'.findAll {
    it.name() == 'TargetValue'
}.each {
    it.replaceBody(Math.abs(new Random().nextInt() % 10) + 1)
}

println XmlUtil.serialize(xml)

此脚本记录:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <TargetValue>8</TargetValue>
  <TargetValue>3</TargetValue>
  <TargetValue>6</TargetValue>
</root>

希望它有所帮助,

答案 1 :(得分:0)

  

这对你有用吗?

String ss = "<TargetValue>4</TargetValue>";
int myRnd = Math.abs(new Random().nextInt() % 10) + 1;
String replaceAll = ss.replaceAll("\\<TargetValue\\>\\d+\\</TargetValue+\\>", "<TargetValue>"+myRnd+"</TargetValue>", String.valueOf(myRnd));
System.out.println(replaceAll);