Форум сайта python.su
2
Возможно ли распарсить строку вида param=value¶m=value¶m=value, где param всегда одно и то же, получить надо id и value. Количество пар param=value неизвестно. Можно ли это сделать не используя re? Просто взялся бы за re, да читал, что зачастую можно и без него обойтись, но тут не знаю как.
Отредактировано barabansheg (Июль 2, 2012 22:20:05)
Офлайн
52
Если что, парсить урлы можно встроеными тулзами. Например requests, мб есть функция в urlparse.
>>> s = 'param=value¶m=value¶m=value' >>> map(lambda x: x.split('='), s.split('&')) [['param', 'value'], ['param', 'value'], ['param', 'value']]
Офлайн
2
А вытащить id у param? в запросе param=value. Тоже тут копаться?
При помощь re вышло так:
arr = re.findall('\[(\d+)\]=(\w+)', string)
Отредактировано barabansheg (Июль 2, 2012 22:48:27)
Офлайн
52
barabansheg
Возможно ли распарсить строку вида param=value¶m=value¶m=value, где param всегда одно и то же, получить надо id и value.
Офлайн
2
Ой, вначале не так прописал)
param[id]=value¶m[id]=value
Офлайн
52
Ну если есть желание поизвращаться, то можно, конечно, написать что-нибудь такое?
>>> s = 'param[id]=value¶m[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')]
Офлайн
2
Это не урл. Serialized массив из js ) Просто возможности передать в json нет
Отредактировано barabansheg (Июль 2, 2012 23:11:21)
Офлайн
857
>>> import re >>> >>> s = 'param[id1]=value1¶m[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')] >>>
Офлайн