You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正则匹配行尾特定元素错误排查:结果超出预期

问题分析与修正

你的代码核心问题出在正则表达式的写法错误:

  • 你使用的r"[B$]"是一个字符类([]包裹的内容),它的作用是匹配单个字符——要么是字母B,要么是符号$。这就导致姓名里的B(比如Binny、Billy开头的B)都会被统计进来,再加上两个成绩的B,最终得到的数量自然远超预期的2个。
  • 另外,字符类里的$失去了正则中“行尾锚点”的特殊意义,变成了匹配$符号本身,这完全不符合你要定位成绩的需求。

修正方案

要准确匹配作为成绩的行尾B,需要满足两个核心条件:

  1. 这个B在冒号(:)之后,可能带有若干空格
  2. B位于每行的末尾

可以使用带捕获组的正则,结合多行模式实现:

import re
def grades():
    with open ("assets/grades.txt", "r") as file:
        grades = file.read()

    # 正则说明:
    # :\s* 匹配冒号+任意数量的空格(包括0个)
    # (B) 捕获目标字符B
    # $ 匹配行尾(需配合MULTILINE模式)
    pattern = r":\s*(B)$"
    # re.MULTILINE让$匹配每行的末尾,而非整个文本的末尾
    result = re.findall(pattern, grades, re.MULTILINE)
    return result

x = grades()
print(x)  # 输出: ['B', 'B']

补充说明

如果只是需要统计B的数量,直接用len(result)就能得到正确的数字2。

内容的提问来源于stack exchange,提问作者AhmedHusnain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:47:13