You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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ツ

火山引擎 最新活动