Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 11, 2013 06:00:38

roman-info01
Зарегистрирован: 2013-10-11
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Требуется получить текст между тегами

Уважаемые форумчане. Являюсь новичком и в 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>"
- все работает!

Что я делаю не так, почему не разбирается файл?

Офлайн

#2 Окт. 11, 2013 06:13:12

roman-info01
Зарегистрирован: 2013-10-11
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Требуется получить текст между тегами

Выяснил, вроде, в чем дело - сделал текст в файле в одну строку - ЗАРАБОТАЛО!

То есть регулярному выражению не нравится символ новой строки, а как с этим бороться? Мой то текст не может быть в одну строку

Отредактировано roman-info01 (Окт. 11, 2013 06:14:04)

Офлайн

#3 Окт. 11, 2013 07:00:53

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

Требуется получить текст между тегами

По идее флаг re.S он же re.DOTALL, должен помочь.

http://savepic.su/3489136.jpg

Офлайн

#4 Окт. 11, 2013 07:06:42

roman-info01
Зарегистрирован: 2013-10-11
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Требуется получить текст между тегами

Да, спасибо, помогло…

Я сделал по другому - удалил символы перевода строки -

 .replace("\n","") 

Офлайн

#5 Окт. 11, 2013 07:35:28

roman-info01
Зарегистрирован: 2013-10-11
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Требуется получить текст между тегами

Всем спасибо за внимание, тему можно закрывать

Офлайн

#6 Окт. 13, 2013 13:08:16

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Требуется получить текст между тегами

Если знаете, что искомый фрагмент не может содержать вложенных тэгов, то можно использовать + выражение, оно и с re.S флагом и без него. Мне такой способ указания искомой информации нравится больше, чем .+? т.к. .+? достаточно абстрактная хотелка. Чем более абстрактную хотелку вы используете, тем больше граблей можете огрести.

Офлайн

#7 Окт. 13, 2013 13:09:49

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Требуется получить текст между тегами

Парсер форума похерил пример выражения содержащего угловую скобочку. Жесть. Унылый парсер.

Я имел в виду это: http://dumpz.org/694185/

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version