Вот проверенное регулярное выражение (из Освоение регулярных выражений ) для сопоставления строковых литералов в двойных кавычках, которые могут содержать кавычки с обратной косой чертой:
r'"[^"\\]*(?:\\.[^"\\]*)*"'
В кавычках с разделителями он потребляет любую пару символов, которая начинается с обратной косой черты, не удосуживаясь идентифицировать второй символ; это позволяет ему обрабатывать экранированные обратные слэши и другие escape-последовательности без лишних хлопот. Это также эффективно, как и при отсутствии собственнических квантификаторов и атомных групп , которые не поддерживаются Python.
Полное регулярное выражение для вашего приложения будет:
r'^((?:[^!"]+|"[^"\\]*(?:\\.[^"\\]*)*")*)!.*$'
Это соответствует только строкам, содержащим комментарии, и захватывает все, что предшествовало комментарию в группе # 1. Захват может быть нулевой длины для строк, которые начинаются с !
. Это регулярное выражение предназначено для использования с sub
вместо search
, как показано здесь:
import re
pattern = r'^((?:[^!"]+|"[^"\\]*(?:\\.[^"\\]*)*")*)!.*$'
x = '''print "hi!" ! Remove me'''
y = re.sub(pattern, r'\1', x)
print(y)
Посмотрите это в действии на ideone.com
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Этот ответ не о ФОРТРАНЕ, а только о коде, который следует правилам, указанным в вопросе. Я никогда не работал с FORTRAN, и каждая ссылка, которую я нашел за последний час или около того, кажется, описывает совершенно другой язык. Мех!