当一个单词不存在时匹配的正则表达式

时间:2018-06-12 21:51:40

标签: java regex apache-commons

我正在使用以下正则表达式从Apache Commons IO调试一些使用RegexFileFilter的Java代码:

(?:custpartnum).*(?:8798518684708).*

这匹配以下字符串:

custpartnum-en-8798518684708.csv_20180612152233580
custpartnum-en-8798518684708.csv_filtered_20180612152300971

我试图告诉它与包含filtered的字符串不匹配?

我试过了,但它仍然匹配两个字符串:

(?:custpartnum).*(?:8798518684708).*(?!filtered)

2 个答案:

答案 0 :(得分:0)

您可以在.csv

之后匹配仅包含数字的文件
custparnum[^.]*8798518684708.csv_\d*

我借此机会删除了可能没有用处的(?:non-capturing groups)(如果您必须使用量词修改它们,它们会很有用)。

答案 1 :(得分:0)

您可以将负向前瞻移动到.*部分之前,并将其更新为匹配任何字符零次或多次,然后进行过滤。

通过这种方式,您首先使用否定前瞻声明在匹配8798518684708之后,右侧不应该有filtered

(?:custpartnum).*(?:8798518684708)(?!.*filtered).*

您可以使用没有非捕获组的更新版本:

custpartnum.*8798518684708(?!.*filtered).*