【问题标题】:Extracting Values from a comma separated String using Regex使用正则表达式从逗号分隔的字符串中提取值
【发布时间】:2026-01-17 16:40:02
【问题描述】:

我有如下字符串:

7,TEST-31052019-02,CD12345,CD54321,Success,Deliverable Recipients

我想使用nifi 中的提取文本处理器从中提取两个值。一个TEST-31052019-02CD54321

我已经尝试过VF[A-Z]*-[0-9]*-[0-9]* 并且能够提取TEST-31052019-02。如何使用相同的正则表达式提取CD54321

VF[A-Z]*-[0-9]*-[0-9]*

预期输出:

TEST-31052019-02, CD54321

【问题讨论】:

    标签: regex apache-nifi


    【解决方案1】:

    我猜我们希望提取两个值,TEST-31052019-02

    ([A-Z]+-[0-9]+-[0-9]+)
    

    CD54321

    ([A-Z0-9]+),[A-Z][a-z]
    

    这里我们使用,[A-Z][a-z] 作为这个捕获组旁边的右边界:

    ([A-Z0-9]+)
    

    如果我们想组合它们,我们可以使用交替:

    ([A-Z0-9]+),[A-Z][a-z]|([A-Z]+-[0-9]+-[0-9]+)
    

    Demo

    正则表达式电路

    jex.im 可视化正则表达式:

    【讨论】:

      【解决方案2】:

      您还可以匹配 1+ 个大写字符并匹配带有破折号的模式或匹配 1+ 个数字并使用正向前瞻来断言后面是大写和小写字符:

      [A-Z]+(?:-[0-9]+-[0-9]+|[0-9]+(?=,[A-Z][a-z]))
      

      说明

      • [A-Z]+ 匹配 1+ 个大写字符
      • (?:非捕获组
        • [0-9]+-[0-9]+ 匹配数字和连字符模式
        • |或者
        • [0-9]+(?=,[A-Z][a-z]) 匹配 1+ 个数字并使用正向前瞻来断言直接在右侧的是 , 大写小写字符 a-z
      • )关闭非捕获组

      Regex demo

      请注意,在您的模式中,您使用 [0-9]*-[0-9]*,但 * 量词将重复 0 次以上,它也可以匹配例如 --

      【讨论】:

      • 谢谢@第四只鸟。
      • 完成。勾选我实施的答案。
      最近更新 更多