Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 26, 2011 07:27:48

unmanner
От:
Зарегистрирован: 2011-04-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение включающее перенос строк

Всём привет!

Делаю так:

text2 = ‘<drafted-by>NEW</drafted-by>’
regexp = re.compile(r“<drafted\-by>.*</drafted\-by>”, re.S)
text = regexp.sub(text2,text)


но такое РВ не работает из-за того что, в исходном тексте между тегами <drafted-by> есть перенос строк и я неправильно пытаюсь включить перенос строк в регулярном выражении.

Поправьте меня пожалуйста, много чего уже перепробовал :)



Офлайн

#2 Апрель 26, 2011 08:19:17

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Регулярное выражение включающее перенос строк

re.DOTALL

PS: И наверное группу стоит образовать, вы же потом с найденным работать захотите
<drafted\-by>(.*)</drafted\-by>



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано (Апрель 26, 2011 08:20:40)

Офлайн

#3 Апрель 26, 2011 08:25:57

strannik747
От:
Зарегистрирован: 2011-02-19
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение включающее перенос строк

Наверное, параметры 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



Офлайн

#4 Апрель 26, 2011 08:35:54

unmanner
От:
Зарегистрирован: 2011-04-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение включающее перенос строк

PooH
e.DOTALL

PS: И наверное группу стоит образовать, вы же потом с найденным работать захотите
<drafted\-by>(.*)</drafted\-by>
Сделал, результат прежний..

strannik747
Наверное, параметры string и replacement в функции sub() перепутали.
Нет не перепутал, я проверил, заменил на любой другой тэг который входит без переноса строк в исходный текст - результат заменилось нормально.

Чертовщина какая-то..



Офлайн

#5 Апрель 26, 2011 08:39:23

unmanner
От:
Зарегистрирован: 2011-04-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение включающее перенос строк

Может переносы строк какие-нибудь нетипичные?
Можно как-нибудь вообще точку за абсолютно все символы считать?



Офлайн

#6 Апрель 26, 2011 11:16:02

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Регулярное выражение включающее перенос строк

unmanner
Может переносы строк какие-нибудь нетипичные?
Можно как-нибудь вообще точку за абсолютно все символы считать?
re.DOTALL это и делает. Дайте уже ваш код на посмотреть



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#7 Апрель 26, 2011 13:38:38

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Регулярное выражение включающее перенос строк

PooH:

>>> import re
>>> re.S == re.DOTALL
True
unmanner:
>>> 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'
..bw



Отредактировано (Апрель 26, 2011 13:40:17)

Офлайн

#8 Апрель 26, 2011 15:48:49

unmanner
От:
Зарегистрирован: 2011-04-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение включающее перенос строк

Проблема оказалось в том что просто перепутал местами / и - в РВ.. So sorry… :(



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version