Как «воспроизвести» элементы строки, обработанной регулярным выражением?Python

Программы на Python
Ответить
Anonymous
 Как «воспроизвести» элементы строки, обработанной регулярным выражением?

Сообщение Anonymous »

Введение. У меня есть файл Markdown, который будет обновляться внешним механизмом. Меня беспокоит то, что в этом файле будут «пустые блоки» (см. ниже), которые я хотел бы очистить. Проблема, с которой я столкнулся, заключается в том, что мое регулярное выражение требует привязки к другим таким же блокам, и я удаляю только каждый второй блок.
Подробности: блоки представляют собой ежедневные заметки и каждый день в полночь добавляется новый «блок на день». Например, сегодня к файлу было бы добавлено следующее (оно будет в самом верху файла):

Код: Выделить всё

# ⬆ 2025-01-10 ⬆ Friday
---
Если сегодня я не добавлю заметок, завтра у меня будет:

Код: Выделить всё

# ⬆ 2025-01-11 ⬆ Saturday
---

# ⬆ 2025-01-10 ⬆ Friday
---
Получается пустой блок для пятницы, который я хочу удалить.
Для этого я использовал следующее регулярное выражение в Python ( — содержимое файла (строка)):

Код: Выделить всё

daily: str = re.sub(
r"(#\ ⬆\ \d\d\d\d\-\d\d\-\d\d\ ⬆.*\n\-\-\-)(\s*#\ ⬆\ \d\d\d\d\-\d\d\-\d\d\ ⬆.*\n\-\-\-)",
r"\1",
daily,
)
Пустой блок — это запись даты, над которой только пустые символы (пробел и новая строка) до следующего блока. Что делает код, так это то, что он соответствует двум группам: следующему блоку (пустому или нет, мы не знаем) и пробелам + дневная марка (и строка MD). Затем сохраняется только первая группа.
Вот запись Regex101, которая показывает мою проблему: удаляется только каждый второй «пустой блок».
Это связано с тем, что в моем определении мне нужно заранее привязаться к блоку, и этот блок больше не проверяется на пустоту (поскольку он уже сопоставлен).
Я рассмотрю запуск регулярное выражение дважды (нет проблем с производительностью), но я был интересно,
  • могу ли я определить свой «пустой блок», не обращаясь к блоку раньше
  • или я могу использовать «временная привязка», где предыдущий блок все еще находится в игре, поскольку регулярное выражение анализирует строку
  • или что-то еще.


Подробнее здесь: https://stackoverflow.com/questions/793 ... d-by-regex
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»