Как удалить строки в файле, где диапазон определяется с помощью регулярных выражений в Python? - PullRequest
1 голос
/ 08 июня 2011

Я пытаюсь очистить серию текстовых файлов, удалив ненужные строки. Я хочу удалить строки, начинающиеся со строки, соответствующей Regex1, и продолжаю удалять, пока не будет найдена строка с Regex2. Мне нужно сделать это с помощью Python. Я уже сделал это с помощью команды sed что-то вроде

sed -r '/regex1/,/regex2/d'

и мне повезло, но мне нужно что-то, что я могу запустить на машинах с Windows. Кроме того, я хочу, чтобы все решение использовало один язык, а не передавало между скриптами оболочки и python. У кого-нибудь есть какие-либо идеи или сообщения, чтобы указать мне?

Ответы [ 3 ]

2 голосов
/ 08 июня 2011
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,
2 голосов
/ 08 июня 2011

Вы можете сделать это, используя re.DOTALL, чтобы . соответствовало новым строкам:

import re

pattern = re.compile(r"regex1.*?regex2", re.DOTALL)

Затем вы можете использовать pattern.sub("", data) для удаления строк.

0 голосов
/ 08 июня 2011

В Perl есть оператор триггера, который можно использовать как:

perl -ne "print unless /regex1/ .. /regex2/" file

вы можете преобразовать это в python, как это объясняется здесь

...