如何修正网球赛事比分提取代码,确保比分顺序正确?
修正网球赛事比分提取的方法
问题核心
提取错误的根源是正则匹配的区间定位偏差,导致误将属于p2的比分提取给p1,或者匹配顺序颠倒。
修正方案
精准正则分组匹配:通过正则表达式锁定两个选手对应的比分区间,严格遵循需求定义的提取范围:
- 捕获
D. Altmaier之后、M. Kecmanovic之前的所有数字(含空格)作为p1_score - 捕获
M. Kecmanovic之后、末尾非比分内容之前的所有数字(含空格)作为p2_score
- 捕获
代码实现:
import re import pandas as pd def extract_match_scores(match_str): # 定义正则模式,分组匹配目标比分 pattern = r'D\. Altmaier\s+([\d\s]+)\s+M\. Kecmanovic\s+([\d\s]+)\s*(?:\[[^\]]+\]|.*)?$' match_result = re.search(pattern, match_str) if match_result: # 清理比分中的冗余空格,输出标准格式 p1 = ' '.join(match_result.group(1).split()) p2 = ' '.join(match_result.group(2).split()) return pd.Series([p1, p2], index=['p1_score', 'p2_score']) return pd.Series([None, None], index=['p1_score', 'p2_score']) # 批量处理DataFrame中的赛事字符串列(假设列名为match_info) df[['p1_score', 'p2_score']] = df['match_info'].apply(extract_match_scores)关键细节说明:
- 正则部分
(?:\[[^\]]+\]|.*)?$用来匹配比分后的附加信息(如场地、赛事备注),避免干扰核心比分提取 split()+join()组合用于清除比分中可能存在的连续空格,保证输出格式统一- 返回
pd.Series可直接批量生成DataFrame的两列结果,提升处理效率
- 正则部分
测试验证
若输入赛事字符串为:"D. Altmaier 4 4 M. Kecmanovic 6 4 [Grand Slam - Center Court]",执行代码后:
- p1_score 结果为
"4 4" - p2_score 结果为
"6 4"
内容的提问来源于stack exchange,提问作者Raphael Ambit
相关产品推荐
相关产品推荐

