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

如何使用Python正则提取DataFrame中'year'关键词前的数字

问题原因

你之前使用的正则\d{2}+(?=year)存在以下错误,无法得到正确结果:

  • 硬编码限定只能匹配2位长度的数字,无法匹配示例中1 year里的1位数字
  • {2}+属于非法的量词组合,Python标准正则引擎无法解析该写法
  • 没有兼容year的复数形式years,也没考虑数字与关键词之间的空格、关键词后带冒号等实际场景。
实现方案

直接使用pandas字符串方法str.extract配合修正后的正则即可,正则逻辑为捕获紧邻year/years前的连续数字,自动忽略不匹配的行:

import pandas as pd

# 测试数据
df = pd.DataFrame({
    'data': [
        'Membership 1 year',
        'Individual - 10 years:',
        'Membership 2019-2024'
    ]
})

# 提取年限
df['contract_years'] = df['data'].str.extract(r'(\d+)\s*years?(?=[:\s]|$)')

执行后得到的结果与预期完全一致:

data contract_years
0      Membership 1 year              1
1  Individual - 10 years:             10
2   Membership 2019-2024            NaN

如果需要将结果转为整数类型(保留空值),可以追加类型转换:

df['contract_years'] = df['contract_years'].astype('Int64')

正则说明:

  • (\d+):捕获1位及以上的连续数字,即目标年限值
  • \s*:匹配数字和关键词之间0到多个任意空白字符
  • years?:同时兼容单数year和复数years两种写法
  • (?=[:\s]|$):正向预查校验,确保关键词后是冒号、空白或字符串结尾,避免误匹配包含year的其他长单词。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:51:59