如何匹配不以'c'开头且包含'an'的模式

时间:2019-06-07 09:10:39

标签: python regex

我当前正在使用此代码,但是当输入为False时它将返回'an'。如何解决可以返回True作为输入'an'的问题?

if re.search('^[^c].*an.*',string):
        return True
    else:
        return False

2 个答案:

答案 0 :(得分:4)

   return not string.startswith('c') and 'an' in string

更加简单,快速,自我描述

答案 1 :(得分:1)

您可以在开始时使用(?!c)否定前瞻:

if re.search('^(?!c).*an',s):

正则表达式匹配

  • ^-字符串的开头
  • (?!c)-开头不允许c
  • .*an-直到最后一次出现an为止,尽可能多的0个或更多字符。

请参见regex demoregex graph

enter image description here

注意:您可能还会使用return bool(re.search('^(?!c).*an',s))甚至是return re.search('^(?!c).*an',s),它们会在if条件下强制转换为布尔值。