正则表达式替换中的匹配数

时间:2010-10-14 11:41:35

标签: python regex

我正在寻找一种简化此代码的Pythonic方法:

fix = re.compile(r'((?<=>\n)(\t){2}(?=<))')
fixed_output = re.sub(fix, 1*2*' ', fixed_output)
fix = re.compile(r'((?<=>\n)(\t){3}(?=<))')
fixed_output = re.sub(fix, 2*2*' ', fixed_output)
# and so on...

即:如果“&gt;”之间有 n 标签字符和“&lt;”,它们被*(n-1)* 2 *个字符替换。这可以推广到单个正则表达式吗?换句话说,是否可以编写一个使用匹配数的正则表达式来确定替换字符串?

1 个答案:

答案 0 :(得分:3)

您可以使用函数而不是固定的替换字符串,并使用匹配的制表符字符数​​来生成替换字符,例如:

re.sub(r'((?<=>\n)\t{2,}(?=<))', lambda m: (len(m.group(0))-1)*2*" ", string)

此处lambda expression lambda m: (len(m.group(0))-1)*2*" "用于将( n -1)·2个空格替换为 n 制表符字符。