次の文字列があると仮定します。
thestring = "1) My Favorite Pokemon Charizard *22.00 MP* [Pre-Avatar Mode Cost: 15.75 MP] [Post-Avatar Mode Cost: 6.250 MP]"
その他のサンプルは次のとおりです。
thestring = "1) My Favorite Pokemon Mew *1 MP* [Pre-Avatar Mode Cost: 0.5 MP] [Post-Avatar Mode Cost: 0.5 MP]"
thestring = "1) My Favorite Pokemon Pikachu *6.25 MP* [Pre-Avatar Mode Cost: 5 MP]; [Post-Avatar Mode Cost: 1.25 MP]"
(3 番目のケースのコロンは意図的なものです)
「プレキャスティングコスト」と「ポストアバターモードコスト」の値を最もよく抽出するにはどうすればよいですか? 正規表現だけでなく string.find メソッドも聞こえますが、これを達成するための最良の方法がわかりません。ただし、「プリアバターモードのコスト」は 15.75 MP である可能性がありますが、種類によっては 15.752 になるか、小数点以下の桁数が複数になる可能性があることに注意してください。構文は高く評価されます。
アップデート:
Python 2.7 を使用しています。最も近い答えは次のとおりです。
m = re.match('\[Pre-Avatar Mode Cost: (?P<precost>\d(\.\d*){0,1}) MP\] \[Post-Avatar Mode Cost: (?P<postcost>\d(\.\d*){0,1}) MP\]', '1) My Favorite Pokemon Mew *1 MP* [Pre-Avatar Mode Cost: 0.5 MP] [Post-Avatar Mode Cost: 0.5 MP]')
実際には適切に一致しないように見えますが、m は一致しないため「Nonetype」という結果になります。
以下を使用してわずかな変更を加えました。
m = re.match('(.*)\[.*(?P<precost>\d+(\.\d*){0,1}).*\].*\[.*(?P<postcost>\d+(\.\d*){0,1}).*\]', '1) My Favorite Pokemon Mew *1 MP* [Pre-Avatar Mode Cost: 0.5 MP] [Post-Avatar Mode Cost: 0.5 MP]')
precost と postcost はどちらも「5」に等しいように見えますが。正規表現に問題がある可能性はありますか?