2016-05-17 16 views
0

私はPythonの新機能です。私は、次の内容Python正規表現 - 数字を取得

#define VKU_BS_MAJOR_VERSION_S "2" 
#define VKU_BS_MINOR_VERSION_S "0" 
#define VKU_BS_BUILD_NUMBER_S "55" 

でファイルを持っていると私はそれが私がこれらの値をインクリメントし、それらをファイルに書き戻したい後2,0及び55を抽出したいです。しかし、私はそれを得ることができません。

私はこれを試してみました:

なし

を印刷しません。しかし、私はregex101で私の正規表現をチェックしましたし、それが正常に動作します

buildInfoFile = open(buildInfoFilePath, "r") 
content = buildInfoFile.read() 
buildMajorRegex = re.compile("VKU_BS_MAJOR_VERSION_S \"(\\d+)\"", re.MULTILINE) 
match = buildMajorRegex.match(content); 
print(match) 

。私は間違って何をしていますか?

また、値を増やして「コンテンツ」に戻す最良の方法は何ですか?

+1

あなたが検索 – njzk2

+1

と混乱が一致している 'match'は*の*先頭から一致するものを探しますライン;代わりに 'search'メソッドを試してみてください。 –

+0

http://stackoverflow.com/questions/35360740/regex-working-on-regex101-not-working-with-pythonも参照してください。これはhttp://stackoverflow.com/questions/180986/の複製としてクローズされています。何の違いか - ピュータン間の再検索と再マッチング –

答えて

0

regular expressionsfindallを使用すると、目的を達成できます。

import re 

s1 = '#define VKU_BS_MAJOR_VERSION_S "2"' 
s2 = '#define VKU_BS_MINOR_VERSION_S "55"' 
s3 = '#define VKU_BS_B123UILD_N456UMBE789R_S "10"' 

re.findall("\d+", s1) 
#['2'] 

re.findall("\d+", s2) 
#['55'] 

r.findall("\d+", s3) 
#['123', '456', '789', '10'] 
0

使用match = buildMajorRegex.search(content)代わりとmatch.group(1)はあなたの姿を与えます。 match使用するに

は、あなたの正規表現は、まさに試合引数にありそうのように:

buildMajorRegex = re.compile("#define VKU_BS_MAJOR_VERSION_S \"(\\d+)\"", re.MULTILINE) 
match = buildMajorRegex.match(content) 
+0

はい、@ njzk2として提案しました。マッチの代わりに検索を試みました。そして、価値を増やして戻す最良の方法は何ですか? –

+0

すべての行を 'list'に読み込み(すでに' open() 'で終わっている)、数字の数字をキャプチャしてインクリメントし、リスト内の対応する項目の数字を置き換えます。最後に、すべての値をファイルに書き戻します。上書きする必要があります。 –