我有一些测试数据,看起来如下:test_ids = [test_data_123, test_123, test_data_456]
我试图将它们传递到Groovy的replaceAll()方法中,该方法将上述数组中的所有元素转换为字符串。${__groovy(vars.get('test_ids').replaceAll(/\b((test_\d+)||(test_data_\d+))\b/) { match\, number -> "\"$number\"" },)}
下面是我正在使用的正则表达式:(test_\d+)||(test_data\d+)
这好像不管用。有没有人能提供一个正则表达式来选择所有的元素?
1条答案
按热度按时间qhhrdooz1#
所以问题是
List
(即[“something here”])不理解replaceAll
。replaceAll
是String上的一个方法(即“something here”)。因此,您需要在List上循环并调用replaceAll。但是,这里有一点我不明白你的问题,这段代码的意义是什么?目前还不清楚你为什么要这样做,所以我认为如果我们明白,我们可以提供更好的帮助,让你得到你想要的,并试图以更直接,更容易理解的方式完成。但是,我只想尝试完成我认为你想要的。
这将返回打印以下内容:
所以它返回它匹配的正则表达式的索引号。这将是
group number
。因此,在您提供的输入中,列表的第一项(test_data_123
)匹配第二组(即2),第二项(test_123
)返回第一组(即1)。第三个和第一个一样(test_data_456
),所以是2。但是最后一项不匹配任何东西,所以没有任何东西被替换,它只是返回给定的String。这不在您的示例输入中,但如果没有匹配的内容会发生什么?在你的算法中要考虑的东西。第一个变化是删除
number
作为闭包的参数,因为传递给闭包的唯一参数是匹配组数组(即match
)。第一项是这样的:[ "test_data_123", null, "test_data_123" ]
,第二个["test_123", "test_123", null]
。x1m1.. -1n1x返回不是第0个元素(即[1.. -1])的索引,并且是非空的。另一个变化是从正则表达式中删除
||
,并将其替换为|
。||
不是正则表达式中的一个东西。如果你想要模式A或模式B,它是A|B
。有几件事要问。
replaceAll
是正确的工具吗?我假设您想知道每个字符串匹配哪个正则表达式。但是因为你使用的是replaceAll
,你必须返回一个String
。但是,你只想知道它是模式1还是模式2。所以我可能会这样做:然后就很容易弄清楚,并使用整数数学来知道哪个是哪个。