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

Regex提取工作经历文本返回空值的问题排查及解决方法

正则提取简历工作经历问题分析与调整方案

问题描述

我用pdfminer提取了一段简历文本,希望编写通用正则逻辑提取“Work Experience”(包含EXPERIENCE、Job Experience等同义表述)与“Areas Of Expertise”(包含Skills、Education等分界词)之间的工作经历内容。尝试了以下正则模式:

pattern = r'^(?:EXPERIENCE|Employment experience|Work Experience|Work  Experience|WORK EXPERIENCE|Previous Employment|Work Experience -|Job experience|)\s*(\S.*?)\n(?:Skills|EDUCATION|Education|SKILLS|Areas  Of  Expertise)'
matches = re.findall(pattern, text, re.M | re.S)
print(matches) 

但返回结果为[],需要排查正则的问题并调整实现需求。

原正则的问题

  • 行首锚定过于严格:^要求标题必须严格在行首,但简历中标题可能存在缩进或前导空格,导致匹配失败。
  • 空分支引发无效匹配:正则中的|)空分支会匹配空字符串,干扰正常的标题匹配逻辑。
  • 内容匹配边界模糊:\S.*?\n的组合在re.S模式下,.会匹配换行符,加上非贪婪匹配,可能提前终止内容匹配;且分界词前的\n没有考虑中间可能存在的空白行。
  • 分界词匹配未处理空白:分界词前后可能存在空格、缩进或换行,原正则直接用\n衔接,无法适配这些场景。

调整后的正则方案

# 优化后的正则模式
pattern = r'(?:^|\n)\s*(?:EXPERIENCE|Employment experience|Work Experience|WORK EXPERIENCE|Previous Employment|Job experience|Work Experience -)\s*\n(.*?)\s*(?:\n|\Z)\s*(?:Skills|EDUCATION|Education|SKILLS|Areas Of Expertise)'
# 仅使用re.S模式,确保.能匹配换行符
matches = re.findall(pattern, text, re.S)
# 清理匹配结果中的多余空白
cleaned_matches = [match.strip() for match in matches]
print(cleaned_matches)

调整说明

  • 标题起始匹配更灵活:用(?:^|\n)匹配标题的起始位置(行首或换行后),\s*匹配标题前后的任意空白(缩进、空格),适配简历中标题的排版差异。
  • 移除空分支:删除原正则中的空选项分支,避免无效匹配干扰。
  • 内容匹配逻辑优化:(.*?)非贪婪匹配标题后到分界词前的所有内容,re.S模式让.包含换行符,确保能捕获多行工作经历。
  • 分界词匹配兼容空白:\s*(?:\n|\Z)\s*匹配内容与分界词之间的任意空白(包括空白行),\s*包裹分界词,处理分界词前后的空格或缩进。
  • 结果清理:通过strip()去除匹配结果首尾的多余空白,让提取的内容更整洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:02:08