我试图找出一个正则表达式匹配任何字符串,不开始与mpeg。一般来说,匹配任何不以给定正则表达式开头的字符串。我尝试了如下方法:
[^m][^p][^e][^g].*
这样做的问题是它要求字符串中至少存在4个字符。我没能想出一个好的方法来处理这个问题,也没能想出一个通用的方法来处理这个问题。我将在Python中使用它。
bihw5rsg1#
^(?!mpeg).*
这使用了一个负向前查找,只匹配一个开头不匹配mpeg的字符串。本质上,它要求“字符串开头的位置不能是一个如果我们开始匹配正则表达式mpeg,我们就可以成功匹配的位置”--因此匹配任何不以mpeg开头的东西,而不匹配任何以mpeg开头的东西。然而,我对您使用这个的上下文很好奇--除了正则表达式之外,可能还有其他更有效或更易读的选项,例如。..
mpeg
if not inputstring.startswith("mpeg"):
rqdpfwrv2#
别用正则表达式失去理智。
if len(mystring) >= 4 and mystring[:4] == "mpeg": print("do something")
或者使用startswith()和“not”关键字
if len(mystring) >= 4 and not mystring.startswith("mpeg")
p4tfgftt3#
试试look-ahead assertion:
(?!mpeg)^.*
或者,如果只想使用求反的类:
^(.{0,3}$|[^m]|m([^p]|p([^e]|e([^g])))).*$
iibxawm44#
你的正则表达式不会匹配“npeg”,我认为你需要想出^($|[^m]|m($|[^p]|p($|[^e]|e($|[^g])))),这是相当可怕的。另一种选择是^(.{0,3}$|[^m]|.[^p]|..[^e]|...[^g]),它只稍微好一点。所以我认为你真的应该像Dav和Gumbo建议的那样使用前瞻Assert:-)
^($|[^m]|m($|[^p]|p($|[^e]|e($|[^g]))))
^(.{0,3}$|[^m]|.[^p]|..[^e]|...[^g])
4条答案
按热度按时间bihw5rsg1#
这使用了一个负向前查找,只匹配一个开头不匹配
mpeg
的字符串。本质上,它要求“字符串开头的位置不能是一个如果我们开始匹配正则表达式mpeg
,我们就可以成功匹配的位置”--因此匹配任何不以mpeg开头的东西,而不匹配任何以mpeg开头的东西。然而,我对您使用这个的上下文很好奇--除了正则表达式之外,可能还有其他更有效或更易读的选项,例如。..
rqdpfwrv2#
别用正则表达式失去理智。
或者使用startswith()和“not”关键字
p4tfgftt3#
试试look-ahead assertion:
或者,如果只想使用求反的类:
iibxawm44#
你的正则表达式不会匹配“npeg”,我认为你需要想出
^($|[^m]|m($|[^p]|p($|[^e]|e($|[^g]))))
,这是相当可怕的。另一种选择是^(.{0,3}$|[^m]|.[^p]|..[^e]|...[^g])
,它只稍微好一点。所以我认为你真的应该像Dav和Gumbo建议的那样使用前瞻Assert:-)