Я не уверен, что ваш предназначен результат, но если вы пытаетесь заменить все между <start>
и </start>
тогда следующий будет работать:
text = """<start><a>
</a><a></a><a></a></start>"""
print re.sub(r'(\<start\>).*(\<\/start\>)', r"\1aa\2", text, flags=re.DOTALL | re.M)
Это даст вам:
<start>aa</start>
Вы должны действительно избежать символов <
и >
в своем регулярном выражении. Кроме того, лучше практика использовать with
заявление при работе с файлами:
from sys import argv
import re
script, filename = argv
with open(filename, "r") as f:
text = f.read()
text2 = re.sub(r'(\<start\>).*(\<\/start\>)', r"\1aa\2", text, flags=re.DOTALL | re.M)
print text2
Это будет заботиться автоматически закрывать файл. Наконец, лучше не использовать переменное имя str
, так как оно скрывает встроенную функцию str()
Python.
Вы говорите, что это не работает. Но вы не сказали, что должен делать ваш код? Или как это не работает, что еще вы получаете? –