假设我有以下字符串:
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]"
(第三种情况的冒号是故意的)
如何最好地提取“Pre-Casting Cost”和“Post-Avatar Mode Cost”的值?我听到了正则表达式,也听到了 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”。知道正则表达式可能有什么问题吗?