Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 5, 2013 13:10:26

Toisen
Зарегистрирован: 2013-01-31
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Парс

Дана строка следующего вида с переменной длиной:

<reply><process id="3135"/><threads><thread id="-1233097872" name="Storage Writer"/><thread id="-1297089680" name="Local Server"/><thread id="-1242563728" name="File Manager Writer"/><thread id="-1288701072" name="Watcher"/><thread id="-1271923856" name="Mailer"/><thread id="-1305478288" name="Web Server"/><thread id="-1263535248" name="XML Synchronizer"/><thread id="-1224709264" name="Logger"/><thread id="-1250952336" name="Session Cleaner"/><thread id="-1218574656" name="Main"/><thread id="-1280312464" name="Backup"/></threads><garbagecollector><objects>37847</objects><garbage>0</garbage><collection><generation>134</generation><generation>4</generation><generation>1</generation></collection></garbagecollector></reply>
Мне нужно из нее выцепить id и name.
делаю следующее:
message #строка
pattern = re.compile(r'<reply><process\s+id="([^"]+)"/><thread\s+id="([^"]+)"\s+name="([^"]+)"\s*/>')
ids,ident,name = pattern.match(message).groups()

Но не знаю как мне сделать шаблон на строку из n-ного числа пар id и name.
Покорно прошу помощи.
Если кто-то знает как это сделать проще - милости прошу

Офлайн

#2 Фев. 5, 2013 14:36:59

Dartanyan
Зарегистрирован: 2013-01-27
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Парс

сам нуб, ты пробовал lxml?

Офлайн

#3 Фев. 5, 2013 16:19:49

Toisen
Зарегистрирован: 2013-01-31
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Парс

Нет, не пробовал. И раньше дела не имел. Первую неделю на питоне ^_^'

Офлайн

#4 Фев. 5, 2013 16:41:43

Toisen
Зарегистрирован: 2013-01-31
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Парс

450 страниц документации лопатить чтобы распарсить… Такое ощущение, что мне предложили травить тараканов ядерными бомбами.

Офлайн

#5 Фев. 6, 2013 09:36:52

warik
Зарегистрирован: 2013-02-06
Сообщения: 23
Репутация: +  1  -
Профиль   Отправить e-mail  

Парс

re.findall(re, text) - находит все совпадения в отличие от match

matches = re.findall(r'id="(-*\d+)" name="([\w\s]+)"', text)

Регулярка возвращает лист из листов с 2мя элементами - id, name
Где text - Ваша строка.

Отредактировано warik (Фев. 6, 2013 09:37:29)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version