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

时间:2015-02-09 17:43:46

标签: regex regex-negation regex-lookarounds

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

例如:

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

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

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

3 个答案:

答案 0 :(得分:3)

您可以使用:

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

RegEx Demo

答案 1 :(得分:1)

你可以创建一个接受你想要的模式的正则表达式,但它会很复杂。如果您创建负正则表达式.*(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

答案 2 :(得分:0)

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

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

DEMO

  • (?<!0)000(?!0)断言000之前和之后不会0