创建单个正则表达式而不是嵌套语句

时间:2015-06-29 17:19:48

标签: python regex python-2.7

我想做以下比赛:

  

如果MBzz在字符串中,则匹配,但如果[Rr][Ee][Ff]在字符串中则不匹配

所以以下内容应该匹配:

  • klasdlkMBzzsdld
  • MBzz

以下内容不应匹配:

  • RefmmmmMBzzmmmmm
  • MBzzmmmmmmREFmmmm

现在,我正在做这个可怕的黑客攻击:

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

然而,我觉得对于像这样简单的事情,我应该能够做到这一点。

1 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式和修饰符i来忽略大小写:

^(?:(?!ref).)*(?=MBzz)(?:(?!ref).)*$

Demo

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]).)*$