2017-01-06 5 views

答えて

1

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

+0

ありがとうございました – dgrat

+0

@dgrat、あなたは歓迎です – RomanPerekhrest

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>という名前を付けていますが、これは私が置き換えでそれを参照していないのでここで少し意味がありません...)。

+0

ありがとう – dgrat

関連する問題