regex 正则表达式匹配除给定正则表达式之外的所有内容

lpwwtiir  于 2023-05-01  发布在  其他
关注(0)|答案(4)|浏览(193)

我试图找出一个正则表达式匹配任何字符串,不开始与mpeg。一般来说,匹配任何不以给定正则表达式开头的字符串。
我尝试了如下方法:

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

这样做的问题是它要求字符串中至少存在4个字符。我没能想出一个好的方法来处理这个问题,也没能想出一个通用的方法来处理这个问题。
我将在Python中使用它。

bihw5rsg

bihw5rsg1#

^(?!mpeg).*

这使用了一个负向前查找,只匹配一个开头不匹配mpeg的字符串。本质上,它要求“字符串开头的位置不能是一个如果我们开始匹配正则表达式mpeg,我们就可以成功匹配的位置”--因此匹配任何不以mpeg开头的东西,而不匹配任何以mpeg开头的东西。
然而,我对您使用这个的上下文很好奇--除了正则表达式之外,可能还有其他更有效或更易读的选项,例如。..

if not inputstring.startswith("mpeg"):
rqdpfwrv

rqdpfwrv2#

别用正则表达式失去理智。

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

或者使用startswith()和“not”关键字

if len(mystring) >= 4 and not mystring.startswith("mpeg")
p4tfgftt

p4tfgftt3#

试试look-ahead assertion

(?!mpeg)^.*

或者,如果只想使用求反的类:

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

iibxawm44#

你的正则表达式不会匹配“npeg”,我认为你需要想出^($|[^m]|m($|[^p]|p($|[^e]|e($|[^g])))),这是相当可怕的。另一种选择是^(.{0,3}$|[^m]|.[^p]|..[^e]|...[^g]),它只稍微好一点。
所以我认为你真的应该像Dav和Gumbo建议的那样使用前瞻Assert:-)

相关问题