带有模式参考的正则表达式

时间:2013-09-11 15:57:08

标签: python regex

假设我有以下字符串:

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"""

这会让我保存内容,但会引用它,以便我可以重新添加原始内容。

注意:我使用以下代码来获取引号中的所有项目,因此我将遍历此项以引用数字

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

那么我该如何制作它以便sub能够识别数字实例,以便我可以创建这种参考?

1 个答案:

答案 0 :(得分: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}{>>> it = itertools.count(1)
>>> next(it)
1
>>> next(it)
2
>>> next(it)
3
}{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生成数字:

{{1}}