Что такое регулярное выражение для многострочных строк документации в Python? - PullRequest
0 голосов
/ 12 февраля 2019

Я работаю над проверкой комментариев и строк документации в файле 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 голосов
/ 12 февраля 2019

Вы не соответствуете кавычки в строке документации.Тройные кавычки в r"""[\S\s]*?""" просто разграничивают строку регулярного выражения, они не являются частью самого регулярного выражения.Вам нужно:

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

Вы также можете упростить его до:

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

и затем использовать флаг re.DOTALL при сопоставлении.Это заставляет . совпадать с новыми строками.

Для сопоставления только строк документации минимум с двумя строками:

r'""".*?\n.*?"""'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...