如何在DataWeave 1.0中使用正则组提取字符串数据?
在DataWeave 1.0中通过正则组名提取字符串数据的方法
没问题!在DataWeave 1.0里确实支持通过正则组名来提取数据,只是你需要调整一下访问匹配结果的方式~
问题原因
你当前的代码里直接用regexMatch["grp1"]无法获取值,是因为scan方法返回的是一个数组(哪怕只有一个匹配结果),每个数组元素才是包含命名组的匹配对象。所以得先取出数组里的第一个元素,再通过组名访问对应的值。
修正后的代码
%var sampleString="3,2,0" { "groups":using(regexMatch= sampleString scan /^(?<grp1>\d{1}),(?<grp2>\d{1}),(?<grp3>\d{1})$/) { "group1": regexMatch[0]["grp1"], // 现在可以通过组名正常获取 "group2": regexMatch[0]["grp2"], // 用组名更直观,可读性更强 "group3": regexMatch[0]["grp3"], "group2_via_index": regexMatch[0][2], // 原索引方式依然有效 "group3_via_index": regexMatch[0][3] } }
额外说明
在DataWeave 1.0中,scan返回的每个匹配项是一个混合结构:
- 索引
0对应整个匹配的完整字符串 - 索引
1、2...对应正则中按顺序定义的捕获组 - 同时你定义的命名组(比如
grp1)会作为键直接存在这个匹配对象里,所以可以通过键名直接访问
用组名访问的好处是代码可读性更高,尤其是当正则里有多个捕获组时,不用再去记忆每个组对应的索引位置。
内容的提问来源于stack exchange,提问作者Venkat
相关产品推荐
相关产品推荐

