正则表达式匹配除了给定正则表达式的所有内容

19 投票
4 回答
50460 浏览
提问于 2025-04-15 16:17

我正在尝试找出一个正则表达式,用来匹配任何不以“mpeg”开头的字符串。更一般来说,就是匹配任何不以某个特定正则表达式开头的字符串。

我试过类似下面这样的写法:

[^m][^p][^e][^g].* 

这个方法的问题在于,它要求字符串至少要有4个字符。我还没找到一个好的方法来处理这个问题,也没找到一个通用的解决办法。

我会在Python中使用这个正则表达式。

4 个回答

3

试试使用前瞻断言

(?!mpeg)^.*

或者如果你只想用否定类的话:

^(.{0,3}$|[^m]|m([^p]|p([^e]|e([^g])))).*$
11

别让正则表达式搞得你头疼。

if len(mystring) >= 4 and mystring[:4] == "mpeg":
    print("do something")

或者可以用startswith()函数,配合“not”关键字。

if len(mystring) >= 4 and not mystring.startswith("mpeg")
35
^(?!mpeg).*

这个用法利用了负向前瞻的技巧,目的是只匹配那些开头不是mpeg的字符串。简单来说,它要求“字符串的开头位置不能是如果我们开始匹配正则表达式mpeg时能够成功匹配的位置”——所以它会匹配任何不以mpeg开头的内容,而不会匹配任何以mpeg开头的内容。

不过,我很好奇你使用这个的具体场景——可能还有其他选择,除了正则表达式,可能会更高效或者更易读,比如……

if not inputstring.startswith("mpeg"):

撰写回答