我想找到使用Apache Nifi这种带有大量文本的CSV文本:
NNNN?NN
其中n是0到9之间的数字,并且?是一个字面问号。
一个真实的例子是:
8764?23
它始终在?
之前有4位数字,在之后有2位数字。
如何做到这一点?
答案 0 :(得分:3)
简单起见:
\d{4}\?\d{2}
但这也会在8764?23
或98764?23
等较长的字符串中匹配8764?234
。
如果您需要在CSV中找到与值相匹配的完全匹配项,则需要更复杂的正则表达式:
(?:^|,)\s*(\d{4}\?\d{2})\s*(?:,|$)
乍一看这看起来有点奇怪,所以让我们分解一下:
(?:^|,)
使用(something|something else)
语法允许选择两个不同的内容 - 这里允许字符串^
的开头或逗号,
。开头的?:
会将此表达式排除在捕获组之外。\s*
允许在匹配的表达式之前显示任意数量的空格(即零个或多个空格,制表符等)。(\d{4}\?\d{2})
指定4个数字\d{4}
,后跟问号\?
(需要进行转义,以区别于正则表达式?
,意味着0或1次出现),然后又有2位数\d{2}
。周围的括号()
用于将其指定为捕获组。\s*
在匹配的表达式后允许更多的空格。(?:,|$)
允许使用逗号,
或字符串$
的结尾,?:
将其排除为捕获组。<强>演示强>
https://regex101.com/r/X0Ic4v/1
<强>用法强>
以上内容可与Nifi的ExtractText
一起使用,以获得每场比赛的第一个捕获组。由于只有感兴趣的捕获组而不是匹配的其余部分,&#34;包括捕获组0&#34;可以设置为false。大概是&#34;启用多线模式&#34;和&#34;启用重复捕获组&#34;应该设置为true。
进一步考虑
以上假设8764?23
与CSV字符串中的值完全相同。但也许你需要允许"8764?23"
?或者可能是'8764?23'
,_8764?23_
甚至ABC8764?23DEF
等其他人?这里有太多可能的变体,只有一种尺寸适合所有,所以请在评论中回复说明上述要求是否符合您的需求。
答案 1 :(得分:2)
以下是您的正则表达式:\d\d\d\d\?\d\d
和tool where you can use it(此处更多complicated版本)
答案 2 :(得分:0)
这是您需要的正则表达式。
(\d{4}\?\d\d)