Найти - Пользователи
Полная версия: Требуется получить текст между тегами
Начало » Python для новичков » Требуется получить текст между тегами
1
roman-info01
Уважаемые форумчане. Являюсь новичком и в 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)

То есть считал в переменную lines весь текст, там действительно хранится весь текст и передал в качестве источника в функцию textintag
Естественно, не работает, причем, если передам текст в виде переменной - работает. Например передам так:
source="aaa<RULES>111</RULES>bbb<RULES>222</RULES>"
- все работает!

Что я делаю не так, почему не разбирается файл?
roman-info01
Выяснил, вроде, в чем дело - сделал текст в файле в одну строку - ЗАРАБОТАЛО!

То есть регулярному выражению не нравится символ новой строки, а как с этим бороться? Мой то текст не может быть в одну строку
smoke853
По идее флаг re.S он же re.DOTALL, должен помочь.

http://savepic.su/3489136.jpg
roman-info01
Да, спасибо, помогло…

Я сделал по другому - удалил символы перевода строки -
 .replace("\n","") 
roman-info01
Всем спасибо за внимание, тему можно закрывать
lorien
Если знаете, что искомый фрагмент не может содержать вложенных тэгов, то можно использовать + выражение, оно и с re.S флагом и без него. Мне такой способ указания искомой информации нравится больше, чем .+? т.к. .+? достаточно абстрактная хотелка. Чем более абстрактную хотелку вы используете, тем больше граблей можете огрести.
lorien
Парсер форума похерил пример выражения содержащего угловую скобочку. Жесть. Унылый парсер.

Я имел в виду это: http://dumpz.org/694185/
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB