Уведомления

Группа в Telegram: @pythonsu

#1 Март 5, 2012 21:33:44

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение

Ребята, подскажите, как из %D0%91%D0%B0%D1%80%D1%8B%D1%88%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2
получить D091 D0B0 D180 D18B D188 D0BD D0B8 D0BA D0BE D0B2
Нужно использовать именно регулярное выражение
Выручите, кто знает, голова уже кипит.

Отредактировано (Март 5, 2012 21:57:57)

Офлайн

#2 Март 5, 2012 22:32:13

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Регулярное выражение

import re

TEXT='%D0%91%D0%B0%D1%80%D1%8B%D1%88%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2'

def repl_fn(match):
return '{}{} '.format(match.group(1), match.group(2))

print TEXT
print re.sub('%(\w{2})%(\w{2})', repl_fn, TEXT)

Офлайн

#3 Март 5, 2012 22:39:47

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение

А можно немного объяснить.
Дабы закрепить.

Офлайн

#4 Март 5, 2012 22:47:59

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Регулярное выражение

http://docs.python.org/library/re.html
sub - замена строки
выражение ‘%(\w{2})%(\w{2})’ соответствует группе из %(два символа)%(два символа)
в repl_fn мы эти группы по два символа собираем в в строчку с пробелом на конце, в результате чего происходит замена %D0%91%D0%B0%… -> D091 D0B0…

Офлайн

#5 Март 6, 2012 00:25:50

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение

Это я понял.
Я по поводу re.sub.()
'%(\w{2})%(\w{2})', repl_fn - как это работает
почему нельзя запихнуть это в одну строку

Офлайн

#6 Март 6, 2012 01:15:09

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Регулярное выражение

xxnikolayxx
как это работает
Ссылку на документацию я привел

xxnikolayxx
почему нельзя запихнуть это в одну строку
Можно - через lambda

Офлайн

#7 Март 7, 2012 00:54:16

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение

lambda - это мини функция.
А вообще в принципи можно без функции обойтись.
Можно еще пару примеров
re.sub()
Дабы поточнее разобраться.
Что меня сбило с толку: у re.sub() 3 параметра.

Офлайн

#8 Март 7, 2012 00:57:50

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

Регулярное выражение

>>> import re
>>> s = '%D0%91%D0%B0%D1%80%D1%8B%D1%88%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2'
>>> r = re.sub(r'(.{4})(?=.)', r'\1 ', s.replace('%', ''))
>>> r
'D091 D0B0 D180 D18B D188 D0BD D0B8 D0BA D0BE D0B2'
>>> s = '%D0%91%D0%B0%D1%80%D1%8B%D1%88%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2%B3'
>>> r = re.sub(r'(.{4})(?=.)', r'\1 ', s.replace('%', ''))
>>> r
'D091 D0B0 D180 D18B D188 D0BD D0B8 D0BA D0BE D0B2 B3'
>>>



Офлайн

#9 Март 21, 2012 07:25:51

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение

py.user.next
Серьезная регулярка.
Это то, что было нужно, спасибо.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version