You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:54:04