[英]Copy and replace while keeping signs within brackets belonging to the search term
我需要替換源代碼文件中的數千個匹配項。 有誰知道在更換括號並保留里面的內容時如何用"foo"
替換"bar"
? 這就是復制和替換的工作方式:
int v = -bar[0].fZ;
int v = -bar[123].fZ;
用。。。來代替:
int v = -foo.foo(0).fZ;
int v = -foo.foo(123).fZ;
使用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)
輸出:
int v = -foo.foo(0).fZ;
int v = -foo.foo(123).fZ;
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>
,這在這里有點沒有意義,因為我沒有在替換中引用它...)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.