Форум сайта python.su
Ребята, подскажите, как из %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)
Офлайн
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)
Офлайн
А можно немного объяснить.
Дабы закрепить.
Офлайн
http://docs.python.org/library/re.html
sub - замена строки
выражение ‘%(\w{2})%(\w{2})’ соответствует группе из %(два символа)%(два символа)
в repl_fn мы эти группы по два символа собираем в в строчку с пробелом на конце, в результате чего происходит замена %D0%91%D0%B0%… -> D091 D0B0…
Офлайн
Это я понял.
Я по поводу re.sub.()
'%(\w{2})%(\w{2})', repl_fn - как это работает
почему нельзя запихнуть это в одну строку
Офлайн
xxnikolayxxСсылку на документацию я привел
как это работает
xxnikolayxxМожно - через lambda
почему нельзя запихнуть это в одну строку
Офлайн
lambda - это мини функция.
А вообще в принципи можно без функции обойтись.
Можно еще пару примеров
re.sub()
Дабы поточнее разобраться.
Что меня сбило с толку: у re.sub() 3 параметра.
Офлайн
>>> 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'
>>>
Офлайн
py.user.nextСерьезная регулярка.
Офлайн