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

KNIME中如何编写正则移除竖线分隔字符串的重复数字编码

KNIME行内竖线分隔编码去重正则方案

原有正则失效原因

你之前使用的\b(\d+)\b.*\b\1\b正则采用贪婪匹配逻辑,会命中从首个重复编码开始到行尾的长文本片段,替换时会丢失大量非重复编码,无法实现「保留首次出现的编码、移除后续重复项」的需求。

全版本兼容方案(推荐)

该方案不依赖高版本正则引擎特性,适配所有KNIME版本,稳定性高:

  1. 拖入String Replacer(字符串替换)节点,接入待处理数据集
  2. 节点配置如下:
    • 选中存储竖线分隔编码的目标列
    • 勾选Regular expression(正则表达式)、Global replacement(全局替换)选项
    • 查找规则(Pattern)填入以下正则:
      \b(\d+)\b(.*?)\|\1\b
      
    • 替换内容(Replacement)填入:
      $1$2
      
  3. 将该字符串替换节点放入KNIME循环流中,设置循环终止条件为「替换后目标列内容与替换前完全一致」即可。该正则每次替换会移除每行中位置最靠后的1个重复编码,循环执行直到没有可替换的重复项,自动完成去重。

高版本KNIME单次替换方案

如果你的KNIME运行在Java 9及以上环境(支持不定长度反向预查),可以直接使用以下正则做全局替换,无需搭建循环,一次执行即可完成去重:

  • 查找规则:
    \|(\d+)\b(?<=\b\1\b.*\1)
    
  • 替换内容留空即可。

提示:如果执行该正则时报语法错误,说明当前KNIME的正则引擎版本不支持高级特性,切换为上述全版本兼容方案即可。

处理效果验证

使用你提供的样例数据测试,两种方案最终输出均完全匹配预期:

0612|0613|061
0211|0612|021|0212
0111
0511|0512|0521

内容的提问来源于stack exchange,提问作者citizen4

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:03:21