Python中多行文档字符串的正则表达式是什么?

时间:2019-02-11 22:29:44

标签: python regex

我正在检查python文件中的注释和文档字符串。现在,我正在使用正则表达式进行检查,并已成功找到单行和多行注释,但无法找到多行文档字符串。

我尝试了类似r"""[\S\s]*?"""

的操作
import re

FILE_SEPARATOR = "/"

MULTILINECOMMENT_RE = r"""/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/"""
SINGLELINECOMMENT_RE_JAVA = r"""^(?:[^"/\\]|\"(?:[^\"\\]|\\.)*
\"|/(?:[^/"\\]|\\.)|/\"(?:[^\"\\]|\\.)*\"|\\.)*//(.*)$"""
SINGLELINECOMMENT_RE_PYTHON = r"""^(?:[^"#\\]|\"(?:[^\"\\]|\\.)*\"|
/(?:[^#"\\]|\\.)|/\"(?:[^\"\\]|\\.)*\"|\\.)*#(.*)$"""
MULTILINEDOCSTRING_RE_PYTHON = r"""[\S\s]*?"""


def count_multiline__docstring_python_comment(contents):
    """Counts the number of multiline Python comments in the code"""
    pattern = re.compile(MULTILINEDOCSTRING_RE_PYTHON, re.MULTILINE)
    matches = pattern.findall(contents)
    return len(matches)

1 个答案:

答案 0 :(得分:2)

您不匹配文档字符串中的引号。 r"""[\S\s]*?"""中的三引号只是分隔正则表达式字符串,它们不是正则表达式本身的一部分。您需要:

r'"""[\S\s]*?"""'

您还可以将其简化为:

r'""".*?"""'

,然后在匹配时使用re.DOTALL标志。这使.匹配换行符。

仅匹配至少两行的文档字符串:

r'""".*?\n.*?"""'