正则表达式排除特定字符串但不排除具有子字符串的字符串

Regex to exclude a specific string but not strings having the substring

我目前需要一个可以排除特定字符串但不能排除包含该字符串的单词的正则表达式。例如,如果您有一个由 0 和 1 组成的字符串。任何包含任意数量的 1 和任意数量的 0 的字符串,但 3 个 0 除外。

例如:

100100  pass
1000100 fail
00100   pass
000100  fail
0000100 pass
111000  fail
11100001 pass

我尝试了以下正则表达式,但它只接受可以以 1 开头但必须以 0 结尾的字符串。

^(1*([0]{0,2}|[0]{4,}))$

您可以使用:

^(?!.*?(?<!0)000(?!0))[01]+$

RegEx Demo

您可以使用以下基于环视的正则表达式。

^(?![10]*(?<!0)000(?!0)[10]*)[10]+$

DEMO

  • (?<!0)000(?!0) 断言 000 之前和之后不会有任何但不是 0

您可以创建一个接受您想要的模式的正则表达式,但这会很复杂。如果您创建否定正则表达式 .*(1|^)000(1|$).* 并测试您的字符串是否与该正则表达式不匹配,将会更容易。

这是示例 python 代码:

import re
r = re.compile("(1|^)000(1|$)")
tests = [
    "100100", "1000100", "00100", "000100", "0000100", "111000", "11100001"
]
for t in tests:
    print("%s %s" % (t, "fail" if r.search(t) else "pass"))

结果:

100100 pass
1000100 fail
00100 pass
000100 fail
0000100 pass
111000 fail
11100001 pass