Groovy中匹配动态变化的CD-XX格式字符串并获取最后一个匹配值的问题
Groovy中匹配动态变化的CD-XX格式字符串并获取最后一个匹配值的问题
嘿,你已经把第一个需求搞定得差不多啦,正则匹配CD-加1到两位数字的逻辑没问题!现在咱们来解决剩下的小挑战——当文本里有多个CD-XX格式的内容时,怎么拿到最后一个匹配的值。
你当前的代码里用matches[0]取的是第一个匹配项,所以才会输出CD-12而不是后面的CD-14。Groovy的正则匹配结果(Matcher对象)其实支持直接获取最后一个元素,咱们只需要把取匹配项的方式改一下就行:
修改后的完整代码
def text = "This is my example text and it contains CD-12. Text continues after that. Text also contains CD-14" def product = "CD-10" // 匹配CD-后跟1到2位数字的正则 def matches = text =~ "CD-\\d{1,2}" println "Default product is: CD-10" if (matches) { println "Match was found!" // 取最后一个匹配项 def match = matches.last() println "Last match is: " + match product = match println "Updated product is: " + match } else { println "No match" println "Product is the default value: " + product }
对应的输出结果
当文本里有多个匹配时,输出会变成:
Default product is: CD-10 Match was found! Last match is: CD-14 Updated product is: CD-14
如果文本里没有任何CD-XX格式的内容,依然会走else分支,输出默认的CD-10,和你之前的逻辑保持一致。
另外再补充个小技巧:如果担心匹配结果为空的情况(不过咱们已经用if (matches)判断过了,所以这里不会有问题),也可以用matches[-1]来取最后一个元素,这是Groovy里列表取倒数第一个元素的语法,和matches.last()效果一样~
备注:内容来源于stack exchange,提问作者jm90
相关产品推荐
相关产品推荐

