Уведомления

Группа в Telegram: @pythonsu

#1 Июль 2, 2012 22:18:20

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

Парсинг строки без re

Возможно ли распарсить строку вида param=value&param=value&param=value, где param всегда одно и то же, получить надо id и value. Количество пар param=value неизвестно. Можно ли это сделать не используя re? Просто взялся бы за re, да читал, что зачастую можно и без него обойтись, но тут не знаю как.



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Отредактировано barabansheg (Июль 2, 2012 22:20:05)

Офлайн

#2 Июль 2, 2012 22:38:15

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Парсинг строки без re

Если что, парсить урлы можно встроеными тулзами. Например requests, мб есть функция в urlparse.

>>> s = 'param=value&param=value&param=value'
>>> map(lambda x: x.split('='), s.split('&'))
[['param', 'value'], ['param', 'value'], ['param', 'value']]



Офлайн

#3 Июль 2, 2012 22:44:53

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

Парсинг строки без re

А вытащить id у param? в запросе param=value. Тоже тут копаться?
При помощь re вышло так:

arr = re.findall('\[(\d+)\]=(\w+)', string)



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Отредактировано barabansheg (Июль 2, 2012 22:48:27)

Офлайн

#4 Июль 2, 2012 22:55:52

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Парсинг строки без re

barabansheg
Возможно ли распарсить строку вида param=value&param=value&param=value, где param всегда одно и то же, получить надо id и value.

Я не знаю, как отсюда можно понять, что такое id.



Офлайн

#5 Июль 2, 2012 22:57:35

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

Парсинг строки без re

Ой, вначале не так прописал)

param[id]=value&param[id]=value
вот примерно такая строка. Нужно получить id и value



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Офлайн

#6 Июль 2, 2012 23:05:03

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Парсинг строки без re

Ну если есть желание поизвращаться, то можно, конечно, написать что-нибудь такое?

>>> s = 'param[id]=value&param[id]=value'
>>> map(lambda x: (x[0], x[1][1:]), (map(lambda x: x[1].split(']'), map(lambda x: x.split('['), s.split('&')))))
[('id', 'value'), ('id', 'value')]

Но вообще для этого есть re и urlparse (если это урл).



Офлайн

#7 Июль 2, 2012 23:11:01

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

Парсинг строки без re

Это не урл. Serialized массив из js ) Просто возможности передать в json нет



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Отредактировано barabansheg (Июль 2, 2012 23:11:21)

Офлайн

#8 Июль 3, 2012 02:54:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Парсинг строки без re

>>> import re
>>> 
>>> s = 'param[id1]=value1&param[id2]=value2'
>>> pattern = """
...     param\[
...     ([^]]+) # any chars except bracket
...     \]=
...     ([^&]+) # any chars except ampersand
... """
>>> lst = re.findall(pattern, s, re.X)
>>> print(lst)
[('id1', 'value1'), ('id2', 'value2')]
>>>



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version