2013-09-11 5 views
2

позволяет сказать, что у меня есть следующая строка:регулярного выражения к югу со ссылкой шаблона

s = """hi my name is 'Ryan' and I like to 'program' in "Python" the best""" 

Я хотел бы запустить re.sub, который изменит следующую строку:

"""hi my name is '{0}' and I like to '{1}' in "{2}" the best""" 

Это позволит мне сэкономить но ссылайтесь на него, чтобы я мог добавить исходное содержимое обратно.

примечание: Я использую следующий код t о захватить все элементы в кавычках, так что я бы цикл через это, чтобы сделать ссылку на номер

items = re.findall(r'([\'"])(.*?)\1',s) 

Так как я могу сделать это так, к югу распознает экземпляр номера, чтобы я мог создать такой род ссылку ?

ответ

4

re.sub Использование с обратным вызовом:

>>> import itertools 
>>> import re 
>>> s = """hi my name is 'Ryan' and I like to 'program' in "Python" the best""" 
>>> c = itertools.count(1) 
>>> replaced = re.sub(r'([\'"])(.*?)\1', lambda m: '{0}{{{1}}}{0}'.format(m.group(1), next(c)), s) 
>>> print(replaced) 
hi my name is '{1}' and I like to '{2}' in "{3}" the best 

Используется itertools.count для генерации чисел:

>>> it = itertools.count(1) 
>>> next(it) 
1 
>>> next(it) 
2 
>>> next(it) 
3 
+0

идеально !! это именно то, что мне нужно –

+0

Теперь мне нужно пойти в класс, но я приму свой ответ, когда вернусь через пару часов –

+0

, если я хотел использовать другие символы для переноса, кроме фигурных скобок, как мне это сделать? когда я изменяю код, чтобы сделать его для '<' этих типов скобок, я получаю следующую ошибку: «Файл» /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py », строка 151, в подпункте возврата _compile (шаблон, флаги) .sub (REPL, строка, количество) файла "", строка 5, в KeyError: '' <1> ' ' –

Смежные вопросы