с одним регулярным выражением
import re
with open("smb", "r") as f:
txt = f.read()
txt = re.sub(r'(\n\[)(.*?)(\[]\n)', '', txt, flags=re.DOTALL)
print(txt)
объяснение регулярного выражения:
(\n\[)
найти последовательность, в которой есть разрыв строки, за которой следует [
(\[]\n)
найти последовательность, где есть [], за которым следует разрыв строки
(.*?)
удалить все, что находится в середине (\n\[)
, а (\[]\n)
re.DOTALL
используется для предотвращения ненужного возврата
!!! PANDAS ОБНОВЛЕНИЕ !!!
То же решение с тем же logi c может быть выполнено с pandas
import re
import pandas as pd
# read each line in the file (one raw -> one line)
txt = pd.read_csv('smb', sep = '\n', header=None)
# join all the line in the file separating them with '\n'
txt = '\n'.join(txt[0].to_list())
# apply the regex to clean the text (the same as above)
txt = re.sub(r'(\n\[)(.*?)(\[]\n)', '\n', txt, flags=re.DOTALL)
print(txt)