Как я могу удалить всю строку после удаления строки с помощью регулярных выражений? - PullRequest
0 голосов
/ 01 мая 2020

Я использую регулярное выражение в Python для удаления определенных c строк из файла; тем не менее, я также хочу, чтобы он удалил всю строку после того, как строка была удалена, и pu sh все вверх. Например: перед регулярным выражением:

apples
oranges
strawberries

Когда я запускаю, скажем

s = 'oranges'
r = re.compile(r"\s(?<!\n){0}.*".format(s), re.M)
txt_file = r.sub("", txt_file)

Это становится

apples

strawberries

Но я хочу, чтобы оно стало

apples
strawberries

Как я могу выполнить sh удаление этой строки после удаления строки регулярного выражения? Я попытался добавить .* в конце выражения регулярного выражения, но не повезло.

1 Ответ

0 голосов
/ 04 мая 2020

Вы можете использовать

(?<!\S){}.*(?:[\r\n]\s*)?".format(re.escape(s))

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

Соответствует:

  • (?<!\S) - левая граница пробелов
  • s - ваша s переменная
  • .* - 0+ символов до конца строки
  • (?:[\r\n]\s*)? - необязательная группа без захвата, которая соответствует необязательной последовательности
    • [\r\n] - символ CR или LF
    • \s* - 0+ пробелов.

См. Python демо :

import re
txt_file = r"""apples
oranges
strawberries"""

s = 'oranges'
r = re.compile(r"(?<!\S){}.*(?:[\r\n]\s*)?".format(s))
txt_file = r.sub("", txt_file)
print(txt_file)

Вывод:

apples
strawberries
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...