我需要在源代码文件中替换数千个匹配项。
有没有人知道如何在更换括号并保留其中的内容时将"bar"
替换为"foo"
?
这就是复制和替换应该如何工作:
int v = -bar[0].fZ;
int v = -bar[123].fZ;
替换为:
int v = -foo.foo(0).fZ;
int v = -foo.foo(123).fZ;
答案 0 :(得分:1)
使用movie(frames)
函数的解决方案:
re.sub()
输出:
import re
code_content = '''
int v = -bar[0].fZ;
int v = -bar[123].fZ;
'''
code_content = re.sub(r'(\-)(bar)\[(\d+)\](?=\.\w+)', r'\1foo.foo(\3)', code_content, re.M)
print(code_content)
答案 1 :(得分:1)
regex
允许您精确匹配字符串并在替换中重用匹配的组:
您可以捕获命名组((?P<number>\d+)
)中的数字,并在替换为\g<number>
时引用它:
import re
text = '''int v = -bar[0].fZ;
int v = -bar[123].fZ;
'''
print(re.sub('int\ v\ =\ -(?P<bar>\w+)\[(?P<number>\d+)\]\.fZ;',
'int v = -foo.foo(\g<number>).fZ;', text))
打印:
int v = -foo.foo(0).fZ;
int v = -foo.foo(123).fZ;
你可以自由地命名和引用更多的组(我也命名为<bar>
,这里有点无意义,因为我没有在替换中引用它...)。