【问题标题】:Regex to exclude a specific string but not strings having the substring正则表达式排除特定字符串但不排除具有子字符串的字符串
【发布时间】:2015-02-09 17:43:46
【问题描述】:
我目前需要一个可以排除特定字符串但不能排除包含该字符串的单词的正则表达式。例如,如果您有一个由 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,}))$
【问题讨论】:
标签:
regex
regex-negation
regex-lookarounds
【解决方案2】:
您可以创建一个接受您想要的模式的正则表达式,但这会很复杂。如果您创建否定正则表达式 .*(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
【解决方案3】:
您可以使用以下基于正则表达式的外观。
^(?![10]*(?<!0)000(?!0)[10]*)[10]+$
DEMO
-
(?<!0)000(?!0) 断言000 的前后不会出现0 以外的任何元素