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

Python正则表达式提取日期:适配多类过期日期标签的问题

解决过期日期提取的正则问题

我来帮你搞定这个问题!你的原脚本主要有两个局限:一是只能匹配固定的"Expiration Date:"标识,没法覆盖"Expiry date"这类变体;二是面对带前缀的标识(比如"Registrar Registration Expiration Date:")时,匹配逻辑不够灵活(原正则虽然能匹配到,但捕获内容的精准度和场景适配性不足)。

下面是调整后的完整解决方案:

1. 优化正则表达式

我们需要写一个能覆盖多种标识变体、适配带前缀场景,还能忽略大小写差异的正则(毕竟文本里可能出现全小写的"expiry date")。

推荐的正则模式:

import re

# 核心正则:匹配多种过期日期标识,精准捕获后续日期
pattern = r'\bExpir(?:ation|y)\s+Date:\s*(.+)'
# 用IGNORECASE忽略大小写,自动适配"Expiry date"、"expiration DATE"等变体
dates = re.findall(pattern, w.text, re.IGNORECASE)

正则细节解释:

  • \b:单词边界,确保我们匹配的是完整的"Expiration"或"Expiry"单词,避免被其他包含这些字符的长单词干扰(比如"Expirations")。
  • Expir(?:ation|y):非捕获分组,同时匹配"Expiration"和"Expiry"两种核心标识变体,精简正则结构。
  • \s+:匹配一个或多个空格,处理标识里的空格差异(比如"Expiry date"和"Expiration Date"的空格都能适配)。
  • Date::匹配标识后的冒号,结合re.IGNORECASE后,自动兼容"date:"或"DATE:"的写法。
  • \s*:匹配零个或多个空格,处理冒号和日期之间可能的空格(比如"Expiration Date: 2025"或"Expiry date:2024"都能匹配)。
  • (.+):捕获冒号后面的日期内容(如果日期可能跨换行,需要额外添加re.DOTALL标志)。

2. 适配更复杂的文本场景

如果你的文本里日期可能跨换行,或者标识后跟着其他无关文本,我们可以用非贪婪匹配+正向预查来精准截断:

# 适配跨换行、多文本混杂的场景
pattern = r'\bExpir(?:ation|y)\s+Date:\s*(.+?)(?=\s+\w+:|$)'
dates = re.findall(pattern, w.text, re.IGNORECASE | re.DOTALL)

这里的(.+?)(?=\s+\w+:|$)会只捕获到下一个标识开头(比如"Registrar:")或文本结尾前的内容,避免把无关文本也当成日期捕获。

3. 测试示例

针对以下测试文本:

Registrar Registration Expiration Date: 2025-12-31
Expiry date: 2024-06-30
expiration DATE: 2023-09-15

使用优化后的正则,会精准捕获到:
['2025-12-31', '2024-06-30', '2023-09-15']

这样就完美覆盖了你提到的所有场景啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:43:50