我正在检查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)
答案 0 :(得分:2)
您不匹配文档字符串中的引号。 r"""[\S\s]*?"""
中的三引号只是分隔正则表达式字符串,它们不是正则表达式本身的一部分。您需要:
r'"""[\S\s]*?"""'
您还可以将其简化为:
r'""".*?"""'
,然后在匹配时使用re.DOTALL
标志。这使.
匹配换行符。
仅匹配至少两行的文档字符串:
r'""".*?\n.*?"""'