Вот регулярное выражение, при условии, что текстовый файл находится в txt
:
import re
m = re.search(r'^\s*description\s*=\s*(.*?)(?=(//)|$)', txt, re.M)
print(m.group(1))
Позвольте мне объяснить. ^
спички в начале строки. Тогда \s*
означает ноль или больше пробелов (или вкладок) description
- ваш якорь для нахождения значения. После этого мы ожидаем, что знак =
с дополнительными пробелами до или после, обозначив \s*=\s*
. Затем мы снимаем все после =
и дополнительных мест, обозначая (.*?)
. Это выражение захватывается скобками. В круглой скобке мы говорим что-либо (точка) столько раз, сколько вы можете найти (звездочку) в не жадности (вопросительный знак), т. Е. Остановить, как только будет найдено следующее выражение.
Следующее выражение представляет собой выражение lookahead, начиная с (?=
, которое соответствует значению сразу после (?=
. И это на самом деле две опции, разделенные вертикальной чертой |
.
Первый вариант, слева от панели, говорит //
(в скобках, чтобы сделать его атомным блоком для операции выбора вертикальной полосы), то есть начало комментария, которое, я полагаю, вы не хочу захватить. Второй вариант: $
, что означает конец строки, который будет достигнут, если на линии не будет комментариев //
. Итак, мы ищем все, что можем, после первого знака =
, пока мы не встретим шаблон //
, или мы встретим конец линии. В этом суть части (?=(//)|$)
.
Нам также нужен флаг re.M
, чтобы сообщить двигателю регулярного выражения, что мы хотим ^
и $
соответствуют началу и концу строк соответственно. Без флага они соответствуют началу и концу всей строки, чего мы не хотим в этом случае.
комментарии были добавлены мной только для claryfying: P – Kerbiter
Это будет соответствовать строке документа. – Kasramvd
Что такое «строка документа»? – RamenChef