我有一个我不想匹配的列表,例如:123、456和78

If the the text is "456", no match.
if the text is "123;456", no match
if the text is "123;78", no match
if the text is "123;34", match
if the text is "56", match


因此,只要文本中没有列表中的任何项目,就可以匹配。

我能想到的最接近的是:

^(?!(;)?(?:123|456|78)(;)?$).*$


但是对于“ 123; 456”失败。

那么正确的正则表达式是什么呢?

谢谢

最佳答案

由于您的问题尚不完全清楚,因此我根据您的示例进行了一些假设。


我假设列表中的每个项目都是一个非空的十进制数字序列;专门匹配以下内容:

[0-9]+

我假设列表中的项目由单个;字符分隔;输入中的任何地方均不允许使用其他前导或终止字符或空格。


我将其分为三部分:


任何领先项目,无论它是否在列表中:

(?:[0-9]+;)*

不在列表中的一项必需项:

(?:(?!(123|456|78)\b)[0-9]+)

任何尾随项目,无论它们是否在列表中:

(?:;[0-9]+)*



结合它们,我们得到最终结果:

^(?:[0-9]+;)*(?:(?!(123|456|78)\b)[0-9]+)(?:;[0-9]+)*$

关于c# - 如何使用正则表达式匹配列表中未包含的任何内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25211158/

10-12 12:41
查看更多