Python正则表达式无法匹配多行字符串中Final Score后的数值问题
问题分析与修复方案
咱们一步一步拆解为啥你的代码匹配不到结果:
1. 大小写与空格的匹配错误
你的正则写的是 "Final score :[^ ]*",但原字符串里的目标文本是 Final Score: 117.5:
- 字符串里是大写的
Score,但正则里是小写的score,正则默认区分大小写,这直接导致匹配失败; - 正则里
score后面多了个空格,可原字符串中Score和冒号是连在一起的(Score:),没有空格,这又给匹配添了障碍。
2. 缺少捕获分组
就算前面的匹配没问题,你的正则也没有用括号把要提取的数值部分括起来,后面调用 m.group(1) 会直接报错——因为根本没有定义分组1。
修复后的代码
针对这些问题,调整正则表达式即可:
import re string = '''Shots Fired: 146 pra 131 Kills: 131 Shots Hit: 131 L=Xo¥s11o) (sam U} Deaths: O 89.73% 89.73 100% Final Score: 117.5 “scone Previous High Score: 115.2''' # 修正正则:匹配正确的大小写,去掉多余空格,用括号捕获数值 m = re.search(r"Final Score: (\d+\.\d+)", string) if m: print(m.group(1)) # 输出 117.5
正则说明:
Final Score:完全匹配目标文本的前缀,大小写和格式一致;(\d+\.\d+)是捕获分组,用来匹配带小数点的数值:\d+匹配至少一位数字,\.匹配小数点,整体就是提取类似117.5这样的数值;- 如果想兼容整数(比如可能出现
Final Score: 100),可以把正则改成r"Final Score: (\d+\.?\d*)",这样整数和小数都能匹配。
内容的提问来源于stack exchange,提问作者Phoenixツ




