2017-02-02 11 views
0

特定の文字の後、特定の文字の前に整数を見つけようとしています。re.search Pythonの結果に変数を追加して置き換えます。

私はこれを持っています。

import re 
filedata = None 

with open('doc.txt', 'r') as file : 
    filedata = file.read() 

count = int(filedata.count('~')) # 454 

m = re.search('~RR\*(\d+)\*', filedata); print(m) 

with open('docresult.txt', 'w') as file: 
    file.write(filedata)</pre> 

は、だから私は達成するために持っているものの数字は~RR\* XXX *とそれを置き換えるの間にあるものは何でもcountを追加することです。だから、

冒頭で私は~RR*120*を持っていたし、私のカウントが、私はre.compileでも試してみましたが、何の成果もなかった~RR*170*

を言うために新しいファイルをしたい50の場合。

答えて

0
あなたの計算(どのように120 + 50インスタンスの175を得ることができる)わから

ないが、ここでは、彼らが置換機能代わりの交換にre.subを使用して、奇妙な~RR*<a number>*パターンと一致したときに、あなたの整数で計算を実行する方法です文字列。

置換関数は、唯一のパラメータとしてマッチオブジェクトとのマッチングで呼び出されます。置換文字列を返す必要があります。私たちは、数字は、抽出された計算され、元の文字列に戻って交換されていることがわかり

hello ~RR*173* foo ~RR*92* 

:スタンドアローン例のプリント

import re 

global count 
count = 50 
filedata = "hello ~RR*120* foo ~RR*40*" 

def repl_function(m): 
    return str(int(m.group(1))+count+len(m.group(1))) 

filedata = re.sub('(?<=~RR\*)(\d+)(?=\*)', repl_function, filedata) 

print(filedata) 

。私は消費しない(lookbehind/lookahead)グループを使用しているので、数字だけが置換文字列に渡され、折り返しパターンは更新された文字列に保持されます。

+0

re考えていただきありがとうございます。正しく動作します。本当にあなたの助けを感謝します! – gizq

関連する問題