我试图找出一个正则表达式,它匹配任何不以mpeg开头的字符串。对此的一般化是匹配任何不以给定正则表达式开头的字符串。
我尝试了如下内容:
[^m][^p][^e][^g].*
这个问题是它要求字符串中至少包含4个字符。我无法找到一种处理这种方法的好方法,也是一种以通用方式处理这种方法的通用方法。
我将在Python中使用它。
答案 0 :(得分:27)
^(?!mpeg).*
这使用负前瞻来匹配开头与mpeg
不匹配的字符串。从本质上讲,它要求“字符串开头的位置不能是一个位置,如果我们开始匹配正则表达式mpeg
,我们就可以成功匹配” - 从而匹配任何不以mpeg开头的东西,而不是匹配任何事情。
但是,我对你正在使用它的上下文感到好奇 - 除了正则表达式之外可能还有其他选择,它可以更有效或更具可读性,例如......
if not inputstring.startswith("mpeg"):
答案 1 :(得分:9)
不要因为正则表达而失去理智。
if len(mystring) >=4 and mystring[:4]=="mpeg":
print "do something"
或将startswith()与“not”关键字一起使用
if len(mystring)>=4 and not mystring.startswith("mpeg")
答案 2 :(得分:2)
答案 3 :(得分:0)
你的正则表达式与“npeg”不符,我想你需要拿出来
^($|[^m]|m($|[^p]|p($|[^e]|e($|[^g]))))
,这太可怕了。
另一种选择是^(.{0,3}$|[^m]|.[^p]|..[^e]|...[^g])
这只是稍好一点。
所以我认为你应该使用Dav和Gumbo建议的前瞻性断言: - )