Форум сайта python.su
Всём привет!
Делаю так:
text2 = ‘<drafted-by>NEW</drafted-by>’
regexp = re.compile(r“<drafted\-by>.*</drafted\-by>”, re.S)
text = regexp.sub(text2,text)
но такое РВ не работает из-за того что, в исходном тексте между тегами <drafted-by> есть перенос строк и я неправильно пытаюсь включить перенос строк в регулярном выражении.
Поправьте меня пожалуйста, много чего уже перепробовал :)
Офлайн
re.DOTALL
PS: И наверное группу стоит образовать, вы же потом с найденным работать захотите
<drafted\-by>(.*)</drafted\-by>
Отредактировано (Апрель 26, 2011 08:20:40)
Офлайн
Наверное, параметры string и replacement в функции sub() перепутали.
Код ниже работает, как и ожидается:
import re
text = """This is a
<drafted-by>
VERY
OLD
</drafted-by>
text.
"""
regexp = re.compile(r"<drafted\-by>.*</drafted\-by>", re.S)
text = regexp.sub('NEW', text)
print text
Офлайн
PooHСделал, результат прежний..
e.DOTALL
PS: И наверное группу стоит образовать, вы же потом с найденным работать захотите
<drafted\-by>(.*)</drafted\-by>
strannik747Нет не перепутал, я проверил, заменил на любой другой тэг который входит без переноса строк в исходный текст - результат заменилось нормально.
Наверное, параметры string и replacement в функции sub() перепутали.
Офлайн
Может переносы строк какие-нибудь нетипичные?
Можно как-нибудь вообще точку за абсолютно все символы считать?
Офлайн
unmannerre.DOTALL это и делает. Дайте уже ваш код на посмотреть
Может переносы строк какие-нибудь нетипичные?
Можно как-нибудь вообще точку за абсолютно все символы считать?
Офлайн
PooH:
>>> import re
>>> re.S == re.DOTALL
True
>>> import re
>>> text = """This is a
<drafted-by>
VERY
OLD
</drafted-by>
text.
<drafted-by>111</drafted-by>
"""
>>> mask = re.compile(r'(<drafted-by>)[^<]+(</drafted-by>)', re.S)
>>> mask.sub(r'\1NEW\2', text)
'This is a\n<drafted-by>NEW</drafted-by>\ntext.\n<drafted-by>NEW</drafted-by>\n'
Отредактировано (Апрель 26, 2011 13:40:17)
Офлайн
Проблема оказалось в том что просто перепутал местами / и - в РВ.. So sorry… :(
Офлайн