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

Python正则解析Yahoo模拟选秀聊天生成DataFrame时遗漏数据

解决Yahoo梦幻选秀聊天字符串正则匹配遗漏行的问题

问题原因

你的正则表达式中用于匹配球员姓名的捕获组([\w\s-]+?)仅支持字母、数字、下划线、空格和连字符,但球员姓名里的点号(.)不在匹配范围内——比如"A. St. Brown"中的两个点,导致该行无法被正则引擎识别,最终被遗漏。

修复方案

修改正则里的姓名匹配规则,把[\w\s-]替换为[\w\s.-],加入对点号的支持,其余逻辑保持不变即可。

修改后的完整函数代码

import pandas as pd
import re

def parse_draft_data(data_string):
    team_abrev = ["Ari","Atl","Bal","Buf","Car","Chi","Cin","Cle","Dal","Den","Det","GB","Hou","Ind","Jax","KC","LAC","LAR","LV","Mia","Min","NE","NO","NYG","NYJ","Phi","Pit","Sea","SF","TB","Ten","Was"]
    pos_abrev = ["QB", "RB", "WR", "TE", "K", "DEF"]

    # 关键修改:在姓名匹配字符集中添加.符号
    pattern = r"(\d+)(?:th|st|nd|rd)?(?:([A-Z])\.\s*)?([\w\s.-]+?)\s*(" + "|".join(team_abrev) + r")\s*-\s*(" + "|".join(pos_abrev) + r")"
    matches = re.findall(pattern, data_string)

    data = {
        "draft_num": [],
        "first_initial": [],
        "last_name": [],
        "team": [],
        "pos": []
    }

    for match in matches:
        draft_num, first_initial, last_name, team, pos = match
        data["draft_num"].append(int(draft_num))
        data["first_initial"].append(first_initial if first_initial else None)
        data["last_name"].append(last_name.strip())
        data["team"].append(team)
        data["pos"].append(pos)

    df = pd.DataFrame(data)
    df["team"] = df["team"].str.strip()
    return df

测试结果

用修改后的函数处理样本输入,输出会包含之前遗漏的行:

draft_num first_initial     last_name team  pos
0         12             J        Jacobs   LV   RB
1         13             S         Diggs  Buf   WR
2         14             D         Adams   LV   WR
3         19             A      St. Brown  Det   WR
4         97             J  Smith-Njigba  Sea   WR
5        120          None         Miami  Mia  DEF

额外优化建议

  • 可以给球队缩写的匹配部分加上\b单词边界,修改为r"\b(" + "|".join(team_abrev) + r")\b",避免和姓名末尾的字母意外匹配,提升匹配准确性。
  • 如果存在含撇号的姓名(比如O'Neal),可以把字符集扩展为[\w\s.-']。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:20:18