Как использовать функцию re.sub для следующего?

#python #substitution #re

#python #замена #python-re

Вопрос:

я хотел бы заменить приведенные ниже строки на,

 ABC ::A1
CDE :A1A1A1
 

Ожидаемый результат:

 ABC ::A1
TIM   2020:11:21:12:51 ZZZ
ABC  ADDEDTIME
CDE :A1A1A1
 

Я хотел бы добавить следующие строки между двумя вышеупомянутыми строками. Пожалуйста, обратите внимание, что из приведенных выше строк A1 / A1A1A1 — это переменная, которая будет продолжать меняться, но первые три альфа-символа останутся прежними. Следовательно, независимо от того, что указано после двоеточия ( ::), необходимо добавить следующие две строки,

Строки, которые нужно добавить

 TIM   2020:11:21:12:51 ZZZ
ABC  ADDEDTIME
 

Комментарии:

1. прочитайте построчно и сохраните буфер из последних 2 строк для чтения и проверьте, соответствуют ли последние 2 строки вашему тестовому сценарию, и если да, выведите несколько дополнительных строк

Ответ №1:

Мы могли бы эффективно использовать re, как показано ниже:

 import re
regex = r"^(ABC ::[A-Z0-9] n)(?=^CDE :[A-Z0-9] )"
test_str = ("ABC ::A1n"
    "CDE :A1A1A1")
subst = "\1TIM   2020:11:21:12:51 ZZZ\nABC  ADDEDTIME\n"

result = re.sub(regex, subst, test_str, 0, re.MULTILINE)
if result:
    print(result)
 

Демонстрация регулярных выражений

По сути, шаблон регулярных выражений соответствует ABC ::ALPHANUM{1 или более}, за которым следует CDE :ALPHANUM{1 или более}, и заменяет первое совпадение в скобках обратно и добавляет разрывы строк и новые строки после него.