我想知道如何在groovy脚本中应用通配符吗?例如,而不是像:
这样的长列表def name1 = 'name1'
def name2 = 'name2'
def name3 = 'name3'
如果字符串可以是任何一个名字,我会很高兴,所以如果它是1,2或3,我就不会感到烦恼,只要它在名字后面有一个字符即可。那没关系。这意味着我可以有一个变量,如:
def name = 'name' + wildcard
有点像sql,你只想要任何开头的地方,如果你想要为名字这样的东西进行searrch,你会写出喜欢'名称%'。
由于
更新
我有三个变量:
def ns4 = 'ns4:testResponse'
def ns3 = 'ns3:testResponse'
def ns2 = 'ns2:testResponse'
但我想为任何ns测试标记标记设置一个变量,所以我尝试了这个:
def ns = 'ns' +/[\d]+/':testResponse'
但是我得到了一个Script36.groovy:17:期待EOF,发现':testResponse'
我也试过def ns = 'ns' +/[\d]+/+':testResponse'
但是当我在ns2和ns之间执行断言时,我得到了这个:
assert ns2 == ns | | | | | ns[\d]+:testResponse | false ns2:testResponse
实际上,我并不想提供多个if语句,如下所示:
if (response.contains(ns2)...
else if (response.contains(ns3)..
else if (response.contains(ns4) etc
我实际上并不担心其中的数字:
def ns4 = 'ns4:testResponse'
def ns3 = 'ns3:testResponse'
def ns2 = 'ns2:testResponse'
所以我想实现一个通配符而不是一个数字,这样我就只能有一个def变量和一个if语句而不是3个def变量和3个if语句。
所以我想改变这个:
def ns4 = 'ns4:testResponse'
def ns3 = 'ns3:testResponse'
def ns2 = 'ns2:testResponse'
...
if (response.contains(ns2)...
else if (response.contains(ns3)..
else if (response.contains(ns4) etc
这样的事情:
def ns = 'ns' +/[\d]+/':testResponse'
...
if (response.contains(ns)
示例回复:
<SOAP-ENV:Body>
<ns5:testResponse>
</ns5:testResponse>
</SOAP-ENV:Body>
因此,在上面的回复中,您可以看到我有一个标记:<ns5:testResponse
但是,根据请求,此标记中的数字可以更改,它可以是:
<ns3:testResponse
<ns4:testResponse
<ns5:testResponse
<ns6:testResponse
<ns7:testResponse
现在,而不是if if语句的if语句包含:<ns3:testResponse
或<ns4:testResponse
或此<ns5:testResponse
等,
我只是想确保它包含标记<ns*:testResponse
,其中星号是任意数字,因此它可以匹配上面提到的5个标记中的任何一个
答案 0 :(得分:2)
要识别正则表达式中的数字,请使用\d
。如果您期望多个数字,请使用\d+
。
以下是示例脚本:
def list = ['name1','name2', 'name10a']
def pattern = /name[\d]+/
list.collect { assert it ==~ pattern }
如果查看列表,则最后一个元素与两个数字后的字符的模式不同。
输出:
groovy> def list = ['name1','name2', 'name10a']
groovy> def pattern = /name[\d]+/
groovy> list.collect { assert it ==~ pattern }
Exception thrown
Assertion failed:
assert it ==~ pattern
| | |
| | name[\d]+
| false
name10a
at ConsoleScript5$_run_closure1.doCall(ConsoleScript5:3)
at ConsoleScript5.run(ConsoleScript5:3)