Форум сайта python.su
0
Уважаемые форумчане. Являюсь новичком и в python и в регулярных выражениях
Задача такая., есть обычный текстовый файл в кодировке UTF-8 примерно такого содержания:
…
class=1D
Par1=100
Par2=200
<RULES>
address_list=10.55.0.1 10.55.0.2
</RULES>
Par3=300
<RULES>
address_list=10.55.0.3 10.55.0.4
</RULES>
Par4=400
Мне нужно получить текст между тегами <RULES></RULES>
Делаю так:
def textintag(self,source,tag1,tag2): re1 = re.compile(tag1+"(.*?)"+tag2, re.IGNORECASE) result = re1.findall(source) return result
f=open(conf_file,"r",-1,"utf-8") lines=f.read() f.close() rules=textintag(lines,tag1,tag2)
source="aaa<RULES>111</RULES>bbb<RULES>222</RULES>"
Офлайн
0
Выяснил, вроде, в чем дело - сделал текст в файле в одну строку - ЗАРАБОТАЛО!
То есть регулярному выражению не нравится символ новой строки, а как с этим бороться? Мой то текст не может быть в одну строку
Отредактировано roman-info01 (Окт. 11, 2013 06:14:04)
Офлайн
15
По идее флаг re.S он же re.DOTALL, должен помочь.
http://savepic.su/3489136.jpg
Офлайн
0
Да, спасибо, помогло…
Я сделал по другому - удалил символы перевода строки -
.replace("\n","")
Офлайн
0
Всем спасибо за внимание, тему можно закрывать
Офлайн
Если знаете, что искомый фрагмент не может содержать вложенных тэгов, то можно использовать + выражение, оно и с re.S флагом и без него. Мне такой способ указания искомой информации нравится больше, чем .+? т.к. .+? достаточно абстрактная хотелка. Чем более абстрактную хотелку вы используете, тем больше граблей можете огрести.
Офлайн
Парсер форума похерил пример выражения содержащего угловую скобочку. Жесть. Унылый парсер.
Я имел в виду это: http://dumpz.org/694185/
Офлайн