You need to enable JavaScript to run this app. Python从非一致格式字符串提取年份出现'NoneType'无group属性报错咨询
优惠活动
大模型
产品
解决方案
定价
更多

Python从非一致格式字符串提取年份出现'NoneType'无group属性报错咨询

报错原因

  • 触发AttributeError是因为re.search()未匹配到符合规则的内容时会返回None,直接调用.group()方法就会报错。
  • 部分行存入re.Match对象,是因为代码执行过程中存在未调用.group()就直接把匹配结果赋值的情况。

修复方案

方案1:调整原有for循环逻辑

增加匹配结果判断,避免直接对None调用方法:

import re
# 正则规则优化:匹配19/20开头的4位年份,加单词边界避免误匹配其他4位数字
pattern1 = r'\b(19|20)\d{2}\b'
# 不要硬编码行数,用len(data)适配任意数据长度
for row in range(len(data)):
    fact_text = data.iat[row, index_fact]
    match_result = re.search(pattern1, fact_text)
    # 仅匹配成功时提取内容
    if match_result:
        data.iat[row, index_year] = match_result.group()
    else:
        data.iat[row, index_year] = None

方案2(更推荐):使用pandas原生矢量化方法实现

pandas提供的str.extract方法专门用于从字符串列中提取正则匹配内容,无需手动写循环,匹配失败自动返回NaN,不会触发报错:

# 正则外层括号为捕获组,extract会直接返回该组匹配到的内容
year_pattern = r'\b((?:19|20)\d{2})\b'
data['Year'] = data['Fact'].str.extract(year_pattern)

正则说明:\b表示单词边界,避免误匹配长数字中的连续4位;(?:19|20)匹配年份开头的19或20(可根据你的数据范围调整),后接两位数字,适配绝大多数常用年份格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 12:15:08