簡體   English   中英

復制並替換,同時將符號保留在屬於搜索詞的括號內

[英]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;

https://docs.python.org/3.1/library/re.html#re.sub

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM