Pentaho中正则如何匹配所有指定关键词并捕获至同一分组?
Pentaho 正则多匹配结果捕获实现方案
你当前使用的正则.*(access|test|rental|email|password).*只能返回1个匹配结果,是因为前后的.*为贪婪匹配,会吞噬掉大部分字符串内容,仅保留最后一个命中的关键词到分组。要实现所有匹配结果捕获并按逗号拼接,可以用以下三种常用方案:
方案1:使用正则表达式计算器(Regex Evaluator)组件
这是最简便的实现方式,无需写代码:
- 首先修改正则为
(access|test|rental|email|password),去掉前后的.* - 打开正则表达式计算器的配置页:
- 选择需要匹配的源字段
- 正则表达式栏填写修改后的规则
- 勾选「允许重复匹配」选项
- 结果类型选择「字符串」,分隔符填写英文逗号
, - 设置输出字段名后即可生效,样例输入最终会得到
access,email,password的输出结果
方案2:使用用户自定义Java表达式组件
如果需要自定义更多处理逻辑,可以写代码实现:
import java.util.regex.*; // 替换为你的源字段名 String input = get(Fields.In, "source_field").getString(r); Pattern pattern = Pattern.compile("(access|test|rental|email|password)"); Matcher matcher = pattern.matcher(input); StringBuilder res = new StringBuilder(); while (matcher.find()) { if (res.length() > 0) res.append(","); res.append(matcher.group(1)); } // 替换为你的输出字段名 get(Fields.Out, "match_result").setValue(r, res.toString());
方案3:使用拆分+过滤+分组流程
如果后续需要单独处理每个命中的关键词,可以用流程化实现:
- 新增「拆分字段为行」组件,用空格作为分隔符把原字符串拆分为单个单词的多行数据
- 新增「过滤行」组件,筛选出命中
access|test|rental|email|password规则的行 - 新增「分组」组件,按原数据的唯一主键分组,把筛选出的关键词用逗号拼接为单个字段
内容的提问来源于stack exchange,提问作者Nikhil
相关产品推荐
相关产品推荐

