使用正则表达式从逗号分隔的字符串中提取值

时间:2019-06-12 03:47:41

标签: regex apache-nifi

我的字符串如下:

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

我想使用nifi中的Extract Text Processor从中提取两个值。一个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

2 个答案:

答案 0 :(得分:3)

我猜我们希望提取两个值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

RegEx电路

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

enter image description here

答案 1 :(得分:3)

您还可以匹配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次以上,并且也可以匹配--