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

Python正则提取字段时捕获组返回空字符串,如何优化正则模式

问题原因

你的问题出在正则模式的编写逻辑上:

  • 你当前的正则使用了3个独立的捕获组配合|或逻辑进行分支匹配,Python的re.findall方法在检测到正则存在多个捕获组时,会将每一次匹配的所有捕获组结果按顺序组成元组返回
  • 由于|逻辑每次只会触发一个分支的匹配,因此另外两个未触发的捕获组就会返回空字符串,最终出现你看到的多余空元素

修正方案

根据作业要求,分两种场景给出对应正则模式:

场景1:单条字符串一次性提取三个字段,三个捕获组分别对应日期、时间、温度

这种写法匹配整行固定格式的字符串,返回的三元组直接按顺序对应三个字段,无空值:

r'Date: (\d{1,2}/\d{1,2}/\d{4}) Time: (\d{1,2}:\d{1,2} ?[pPaA]\.?[mM]\.?) Temperature: (\d{1,3}\.?\d{0,3} ?[CF])'

调用re.findall返回结果示例:

[('12/31/1999', '11:59 p.m.', '44 F')]

场景2:逐个匹配所有符合要求的字段,返回值为纯字符串列表

这种写法不使用捕获组,re.findall会直接返回所有匹配到的完整内容,无空值:

r'(?<=Date: )\d{1,2}/\d{1,2}/\d{4}|(?<=Time: )\d{1,2}:\d{1,2} ?[pPaA]\.?[mM]\.?|(?<=Temperature: )\d{1,3}\.?\d{0,3} ?[CF]'

调用re.findall返回结果示例:

['12/31/1999', '11:59 p.m.', '44 F']

补充说明

不需要修改调用的匹配函数,只需要调整正则的分组逻辑即可符合要求。

内容的提问来源于stack exchange,提问作者J.Todd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 02:21:02