正则表达式匹配除了给定正则表达式的所有内容
我正在尝试找出一个正则表达式,用来匹配任何不以“mpeg”开头的字符串。更一般来说,就是匹配任何不以某个特定正则表达式开头的字符串。
我试过类似下面这样的写法:
[^m][^p][^e][^g].*
这个方法的问题在于,它要求字符串至少要有4个字符。我还没找到一个好的方法来处理这个问题,也没找到一个通用的解决办法。
我会在Python中使用这个正则表达式。
4 个回答
3
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"):