Многострочная замена на регулярное выражение Python - PullRequest
0 голосов
/ 18 января 2019

У меня есть повторяющийся текст в большом файле, который я хочу заменить другим текстом. Например:

некоторый текст ....... \ n разделить по диапазону (STRT_DTTM) \ n еще немного текста ...... \ n ); Я хочу использовать регулярные выражения, чтобы найти эти блоки, которые начинаются с разделения по диапазону и заканчиваются); и замените этот блок на «ЭТО ИСПЫТАНИЕ». Я использую код ниже импорт ре

with open(r"C:\Users\x217838\Desktop\python\input.txt","rt") as in_file:
    text = in_file.read()
    s = re.compile("^partition by range(.*);\)$)",re.MULTILINE)
    replace = re.sub(s, 'THIS IS TEST', text)
    print(replace)

Пожалуйста, дайте мне знать, где я иду не так.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Если ваш текст состоит из нескольких строк, то примерно так:

some text.......
partition by range (STRT_DTTM)
some more text......
);

Тогда вам нужно будет использовать модификатор (?s), чтобы включить . сопоставление новой строки.

Демо

Примеры кодов Python,

import re

s = '''some text.......
partition by range (STRT_DTTM)
some more text......
);'''

mods = re.sub(r'(?s)partition by range(.*?)\);','THIS IS TEST',s)
print(mods)

печать

some text.......
THIS IS TEST
0 голосов
/ 18 января 2019

Вы должны использовать \ для всех зарезервированных символов регулярного выражения -> [\^$.|?*+(){}. Окончательный код будет:

import re
text = "partition by range(CANE) uno"
s = re.compile("^partition by range\(.*\)",re.MULTILINE)
replace = re.sub(s, 'THIS IS TEST', text)
print(replace)

Результат:

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