Комментарии в строке и строках в комментариях

Я пытаюсь подсчитать символы в комментариях, включенных в C-код, используя Python и Regex, но не удался. Сначала я могу стереть строки, чтобы избавиться от комментариев в строках, но это также приведет к стиранию строки в комментариях и результат будет плохим. Есть ли возможность спросить, используя регулярное выражение, чтобы не соответствовать строкам в комментариях или наоборот?

  • Python Regex - Анализ HTML
  • Regex Python - почему конец строки ($ и \ Z) не работает с групповыми выражениями?
  • Python re.search
  • Поиск номеров телефонов в скрипте python
  • Использование RegEx для соответствия IP-адресам в Python
  • Python / Regex - Match. #, #. в String
  • Чтобы суммировать значения одних и тех же элементов в списке кортежей, когда они являются строками
  • Проверьте, находится ли элемент уже в очереди
  • Какой инструмент использовать для анализа языков программирования в Python?
  • ошибка: код в pandas числовые разрывы столбцов с ошибкой форматирования строки
  • SQLAlchemy - эквивалент INSERT или REPLACE
  • Ошибка IDLE при открытии в Mac OS X
  • 3 Solutions collect form web for “Комментарии в строке и строках в комментариях”

    Нет, не совсем.

    Regex не является правильным инструментом для синтаксического анализа вложенных структур, как вы описываете; в любом случае вам придется анализировать синтаксис C (или «тупое подмножество» его, которого вы заинтересовали), и вы можете найти в нем регулярное выражение. Это будет относительно простая машина состояний с тремя состояниями (CODE, STRING, COMMENT).

    Регулярные выражения не всегда являются заменой реального анализатора .

    Вы можете вырезать все строки, отсутствующие в комментариях, путем поиска регулярного выражения:

     '[^'\r\n]+'|(//.*|/\*(?s:.*?)\*/) 

    и заменяя:

     $1 

    По сути, это ищет string|(comment) regex string|(comment) которая соответствует строке или комментарию, захватывая комментарий. Замена не является ничем, если строка была сопоставлена ​​или комментарий, если комментарий был сопоставлен.

    Хотя регулярные выражения не являются заменой реального анализатора, вы можете быстро создать рудиментарный синтаксический анализатор, создав гигантское регулярное выражение, которое заменяет все используемые вами токены (комментарии и строки в этом случае). Если вы пишете немного кода для обработки комментариев, но не в строках, повторяйте все совпадения вышеупомянутого регулярного выражения и считайте символы в первой группе захвата, если он участвовал в матче.

    Python - лучший язык программирования в мире.