You need to enable JavaScript to run this app. 如何在Pandas DataFrame中精准提取文本内括号包裹的年份数字
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中精准提取文本内括号包裹的年份数字

Pandas 精准提取文本列括号内年份的实现方案

问题根因

此前直接使用\d\d\d\d做正则匹配没有前置上下文约束,只要字符串中出现连续四位数字就会被命中,因此碰到Νόμος 4000 (1962)这类文本时,会优先匹配到括号外的4000,无法拿到括号内的目标年份。

核心正则优化

把匹配范围锁定在左括号紧跟四位数字的结构上,通过捕获组提取括号内的数字内容,从规则上排除括号外的四位数字干扰。
基础适配正则:
\((\d{4})\)

  • 规则逻辑:匹配字面意义的英文左括号(,紧跟连续四位阿拉伯数字,其中四位数字被纳入捕获组,是最终需要提取的目标值
  • 鲁棒性拓展:如果需要兼容括号与数字之间存在空格的场景(如( 1990 )),可将正则调整为\(\s*(\d{4})\s*\),通过\s*匹配零到多个空白字符,适配不同排版的多语种文本

完整实现步骤

  1. 加载构造示例DataFrame
import pandas as pd
# 构建多语种文本示例数据
text_list = [
    "Césio 137 - O Pesadelo de Goiânia (1990)",
    "Nattbuss 807 (1997)",
    "Νόμος 4000 (1962)"
]
df = pd.DataFrame({"source_text": text_list})
  1. 调用字符串方法提取目标年份
# 提取括号内的四位年份值
df["extracted_year"] = df["source_text"].str.extract(r'\((\d{4})\)')
  1. 结果验证
    运行后extracted_year列的输出完全符合预期:
1990
1997
1962

方案特性

  • str.extract方法会自动返回正则中捕获组的内容,不会将匹配到的括号字符一并返回
  • 规则强制要求四位数字必须紧跟在左括号之后,从根源上规避文本中夹带的其他四位数字(如示例中的4000)造成的误匹配
  • 对带特殊字符的多语种文本无额外解析要求,不依赖特定语言的识别能力,适配性广

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 20:54:01