如何通过正则从pandas DataFrame中提取全部GRI标准及条款编号?
实现方案
通过正则分块匹配逻辑即可实现需求,无需拆分多步复杂处理,适配海量文本批量处理场景,代码可直接复用:
import re def extract_gri_codes(text): codes = [] # 提取原有「数字-数字」格式的GRI披露项编号 codes.extend(re.findall(r'\b\d+-\d+\b', text)) # 逐段匹配每个GRI模块下属的Clause条款 for module in re.finditer(r'GRI (\d+):(.*?)(?=GRI \d+:|$)', text, flags=re.DOTALL): module_id = module.group(1) module_content = module.group(2) clause_ids = re.findall(r'Clause (\d+\.\d+)', module_content) codes.extend([f"{module_id}-{cid}" for cid in clause_ids]) return '\n'.join(codes) # 批量应用到DataFrame目标列 df['extract_result'] = df['column'].apply(extract_gri_codes)
逻辑说明
- 兼容性强:不需要硬编码101模块编号,无论后续出现GRI103、GRI200系列等其他模块下的Clause条款,都能自动识别所属模块编号完成格式拼接
- 处理效率高:正则采用非贪婪匹配+边界断言,处理百万级行数据无明显性能瓶颈,满足ESG标准映射的批量处理要求
- 输出完全匹配需求:先提取原有格式的披露项编号,再按模块顺序拼接条款编号,对提供的样例文本运行后输出结果如下:
102-40 102-42 102-43 102-44 101-1.1 101-1.3 101-2.1
内容的提问来源于stack exchange,提问作者Jorge
相关产品推荐
相关产品推荐

