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

如何在Apache NiFi中使用正则表达式查找指定格式的数字序列?

在Apache NiFi中从CSV文件提取特定格式文本的解决方案

我来帮你搞定这个需求!要从CSV里精准匹配nnnn?nn(4位数字+字面问号+2位数字,比如8764?23)这种格式的内容,用NiFi的正则相关处理器就能轻松实现,下面是具体的操作步骤和细节:

一、选对处理器:优先用ExtractText

如果你的目标是提取匹配到的文本,ExtractText处理器是最直接的选择——它专门用来从FlowFile内容里用正则捞取指定格式的内容。如果需要替换或过滤内容,也可以用ReplaceText,但ExtractText更贴合这个场景。

二、核心配置:正则表达式与参数设置

  1. 先确保你已经用GetFile处理器把CSV文件加载到NiFi的数据流中(如果还没做这一步的话)。
  2. 配置ExtractText的关键参数:
    • Regular Expressions:添加正则表达式:
      \d{4}\?\d{2}
      
      给你拆解下这个正则的逻辑:
      • \d{4}:精准匹配4位0-9的数字
      • \?:匹配字面量的问号(因为问号在正则里是特殊元字符,必须用反斜杠转义)
      • \d{2}:精准匹配2位0-9的数字
    • Destination:根据需求选择:
      • 选flowfile-attribute:把提取到的内容存到FlowFile的属性里,方便后续处理器调用
      • 选flowfile-content:直接把FlowFile的内容替换成匹配到的文本,适合只保留目标内容的场景
    • Maximum Matches:如果单条CSV记录里可能有多个匹配项,设置-1表示匹配所有,或者指定具体数量(比如1只取第一个匹配)

三、进阶:针对特定CSV列提取

如果你的CSV有固定列结构,只想在某一列里查找匹配内容,那可以用更精准的流程:

  1. 用ConvertRecord把CSV格式转换成NiFi的Record格式(比如Avro),需要提前配置CSVReader和AvroRecordSetWriter。
  2. 用UpdateRecord处理器,在Properties里添加规则:
    • 目标列名(比如target_column)对应的Record Path Value设置为:
      ${target_column:replaceAll('.*?(\d{4}\?\d{2}).*', '$1')}
      
      这个表达式会把目标列里的内容只保留匹配到的nnnn?nn格式文本,其他内容去掉。

四、完整流程示例

一个典型的数据流链路可以是:

  • GetFile → 读取指定目录下的CSV文件
  • ExtractText → 提取匹配的格式文本
  • PutFile → 把提取结果写入到指定输出目录(或者根据需求换成PutDatabaseRecord等下游处理器)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:09:59