Кажется, что все упустили это: в документации для re.sub
параметры отображаются следующим образом:
re.sub(pattern, repl, string, count=0, flags=0)
То есть четвертый параметр - это число выполненных замен, а не числофлаги, которые будут использоваться. Вы сказали re.DOTALL
, но это интерпретировалось как параметр count
. Вам просто нужно было сказать flags=re.DOTALL
, чтобы убедиться, что используются правильные флаги, чтобы символ .
совпадал с новой строкой:
y = re.sub(r'(?<=<tag>\n)(.*)(?=\n</tag>)',r" jkl",text, flags=re.DOTALL)
Вы должны обновить весь свой код, добавив flags=
до re.DOTALL
.
import re
text = """<tag>
abc
def
ghi
</tag>
"""
print("2. Substitution works!")
y = re.sub(r'(?<=<tag>\n)(.*)(?=\n</tag>)',r" jkl",text, flags=re.DOTALL)
print(y)
Отпечатки:
2. Substitution works!
<tag>
jkl
</tag>