ソースコードファイルで何千もの一致を置き換える必要があります。 "bar"
を"foo"
に置き換える方法を知っていますか?検索用語に属する括弧内に看板を入れてコピーして置換する
int v = -bar[0].fZ;
int v = -bar[123].fZ;
と交換してください:
int v = -foo.foo(0).fZ;
int v = -foo.foo(123).fZ;
ソースコードファイルで何千もの一致を置き換える必要があります。 "bar"
を"foo"
に置き換える方法を知っていますか?検索用語に属する括弧内に看板を入れてコピーして置換する
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>
という名前を付けていますが、これは私が置き換えでそれを参照していないのでここで少し意味がありません...)。
ありがとう – dgrat
ありがとうございました – dgrat
@dgrat、あなたは歓迎です – RomanPerekhrest