Найти - Пользователи
Полная версия: Регулярное выражение
Начало » Python для новичков » Регулярное выражение
1
xxnikolayxx
Ребята, подскажите, как из %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
Нужно использовать именно регулярное выражение
Выручите, кто знает, голова уже кипит.
s0rg
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)
xxnikolayxx
А можно немного объяснить.
Дабы закрепить.
s0rg
http://docs.python.org/library/re.html
sub - замена строки
выражение ‘%(\w{2})%(\w{2})’ соответствует группе из %(два символа)%(два символа)
в repl_fn мы эти группы по два символа собираем в в строчку с пробелом на конце, в результате чего происходит замена %D0%91%D0%B0%… -> D091 D0B0…
xxnikolayxx
Это я понял.
Я по поводу re.sub.()
'%(\w{2})%(\w{2})', repl_fn - как это работает
почему нельзя запихнуть это в одну строку
s0rg
xxnikolayxx
как это работает
Ссылку на документацию я привел

xxnikolayxx
почему нельзя запихнуть это в одну строку
Можно - через lambda
xxnikolayxx
lambda - это мини функция.
А вообще в принципи можно без функции обойтись.
Можно еще пару примеров
re.sub()
Дабы поточнее разобраться.
Что меня сбило с толку: у re.sub() 3 параметра.
py.user.next
>>> 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'
>>>
xxnikolayxx
py.user.next
Серьезная регулярка.
Это то, что было нужно, спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB