#python #regex #lines
#python #регулярное выражение #строки
Вопрос:
Я пытаюсь очистить серию текстовых файлов, удалив ненужные строки. Я хочу удалить строки, начинающиеся со строки, соответствующей регулярному выражению 1, и продолжать удалять, пока не будет найдена строка с регулярным выражением 2. Мне нужно сделать это с помощью python. Я уже делал это, используя команду sed, что-то вроде
sed -r '/regex1/,/regex2/d'
и мне повезло, но мне нужно что-то, что я могу запустить на компьютерах с Windows. Кроме того, я хочу, чтобы все решение использовало один язык вместо перехода между скриптами shell и python. У кого-нибудь есть какие-либо идеи или сообщения, на которые можно указать мне?
Комментарии:
1. A) Вы могли бы использовать cygwin для запуска sed в Windows. Б) Возможно, вы захотите взглянуть на
re
пакет python.2. просто рекомендация: слева от каждого ответа ниже стоит большая буква «V». Если одно из них решило вашу проблему — как вы сказали, решило — просто щелкните по нему, чтобы дать понять, что это правильный ответ на ваш вопрос. На самом деле, попробуйте делать это на каждый заданный вами вопрос, и вы получите приемлемый ответ 🙂
Ответ №1:
Вы можете сделать это, используя re.DOTALL
для .
сопоставления новых строк:
import re
pattern = re.compile(r"regex1.*?regex2", re.DOTALL)
Затем вы можете использовать pattern.sub("", data)
для удаления строк.
Комментарии:
1. Не используйте это, если ваш файл действительно большой.
Ответ №2:
import sys,re
reg_start = 'reg1'
reg_end = 'reg2'
to_print = 1
for line in sys.stdin.readlines():
if re.search(reg_start, line):
to_print = 0
elif re.search(reg_end, line):
to_print = 1
if to_print:
print line,
Ответ №3:
В perl есть оператор триггера, который можно использовать как :
perl -ne "print unless /regex1/ .. /regex2/" file
вы могли бы преобразовать это в python, как это объясняется здесь