我有一个我不想匹配的列表,例如: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/