我想做以下比赛:
如果
MBzz
在字符串中,则匹配,但如果[Rr][Ee][Ff]
在字符串中则不匹配
所以以下内容应该匹配:
以下内容不应匹配:
等
现在,我正在做这个可怕的黑客攻击:
def mySearch(val):
if (re.compile('MBab').search(val) is not None) and \
(re.compile('[Rr][Ee][Ff]').search(val) is None):
return re.compile('MBab').search(val).group()
return None
然而,我觉得对于像这样简单的事情,我应该能够做到这一点。
答案 0 :(得分:2)
您可以使用以下正则表达式和修饰符i
来忽略大小写:
^(?:(?!ref).)*(?=MBzz)(?:(?!ref).)*$
regex=re.compile(r'^[^ref]*(?=MBzz)[^ref]*$',re.I|re.MULTILINE)
(?=MBzz)
背后的正面外观将确保您的字符串包含MBzz
的正则表达式引擎,并且(?:(?!ref).)*
后面的负面视图将匹配除ref
之外的任何内容。
如果您想要考虑MBzz
的情况,您可以使用以下正则表达式而不使用case case修饰符:
^(?:(?![rR][eE][fF]).)*(?=MBzz)(?:(?![rR][eE][fF]).)*$