正则表达式与注释不匹配docstring

时间:2018-11-07 11:16:52

标签: python regex comments docstring

我要匹配以下项中的this(包括空格):

def foo():
    """
    this
    """

    pass

但是在这种情况下,我不想匹配任何东西:

# def foo():
#    """
#    this
#    """
#  
#    pass

目前我正在使用"""(.*?)""" 使用DOTALL-flag来捕获第一个示例,但是显然这并不妨碍第二部分的匹配。 此正则表达式无法正常工作,因为它会在#^(?!#)"""(.*?)"""

首次出现后阻止任何匹配

1 个答案:

答案 0 :(得分:1)

使用常见的解决方法:匹配不需要的内容并匹配并捕获所需的内容:

$ docker run -d --name tst -e TESTME=YES busybox tail -f /dev/null
55a3fe206588a8030365df30a670ca89a50c54816d044184d5870a4a76ce8199
$ docker exec -it tst sh
/ # echo $TESTME
YES
/ #

请参见regex demo。只收集第1组的值。

详细信息

  • (?sm)^#[^\r\n]*|"""(.*?)""" -(?sm)re.MULTILINE标志
  • re.DOTALL-一行的开头
  • ^-一个#字符
  • #-该行的其余部分(CR和LF以外的0个字符)
  • [^\r\n]*-或
  • |-一个"""字符串
  • """-组1:零个或多个字符,尽可能少
  • (.*?)-一个"""字符串

Example Python 3 code

"""