Извлечение фрагментов текста из документа и запись их в новый текстовый файл - PullRequest
0 голосов
/ 15 мая 2019

У меня большой текстовый файл, который я хочу прочитать в несколько строк, и записать эти строки как одну строку в текстовый файл.Например, я хочу начать читать в строках с определенного начального слова и заканчивать одиночными скобками.Поэтому, если мое начальное слово «CAR», я бы хотел начать чтение, пока не будет прочитана одна скобка с разрывом строки.Начальные и конечные слова также должны быть сохранены.

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

Код:

array = []
f = open('text.txt','r') as infile
w = open(r'temp2.txt', 'w') as outfile
for line in f:
    data = f.read()
    x = re.findall(r'CAR(.*?)\)(?:\\n|$)',data,re.DOTALL)
    array.append(x)
    outfile.write(x)
return array

Как может выглядеть текст

( CAR: *random info*
    *random info* - could be many lines of this
)

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Мы можем сопоставить интересующий вас текст, используя шаблон регулярного выражения: (CAR.*)\) с флагами gms.

Тогда нам просто нужно удалить символы новой строки из полученных совпадений и записать их в файл.

with open("text.txt", 'r') as f:
    matches = re.findall(r"(CAR.*)\)", f.read(), re.DOTALL)

with open("output.txt", 'w') as f:
    for match in matches:
        f.write(" ".join(match.split('\n')))
        f.write('\n')

Выходной файл выглядит так:

CAR: *random info* *random info* - could be many lines of this

EDIT: обновлен код для добавления новой строки между совпадениями в выходной файл

1 голос
/ 15 мая 2019

Использование регулярных выражений вполне подходит для подобных задач.Вы не можете использовать их, когда ваш шаблон содержит рекурсию, например, получить содержимое из круглых скобок: ((text1) (text2)).

Вы можете использовать следующее регулярное выражение: (CAR[\s\S]*?(?=\)))

См. Объяснение ...

enter image description here

Здесь вы можете визуализировать свое регулярное выражение ...

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