我正在寻找一种简化此代码的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 *个字符替换。这可以推广到单个正则表达式吗?换句话说,是否可以编写一个使用匹配数的正则表达式来确定替换字符串?
答案 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 制表符字符。