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

Python中使用正则表达式分割字符串并提取销售起止时间是否可行?

当然可以用正则表达式实现!

相比多次split操作,正则反而更适合这类提取需求——尤其是当你的目标字符串里的活动时间格式不固定、中间夹杂其他无关内容时,正则的灵活性会帮你省很多事。

核心思路:用「捕获分组」精准抓信息

正则的关键就是通过括号包裹的捕获分组,直接定位你需要的开始/结束时间片段。首先你得先梳理清楚目标字符串里活动时间的常见模式,比如是「XXXX年XX月XX日 至 XXXX年XX月XX日」,还是「活动从10:00开始到18:00结束」,只要有规律,正则就能适配。

举个具体的例子

假设你的目标字符串是:

618年中大促:2024年6月1日0点开始,至2024年6月18日24点结束,全场满300减50!

我们可以写一个针对性的正则:

618年中大促:(\d{4}年\d{1,2}月\d{1,2}日\d{1,2}点).*至(\d{4}年\d{1,2}月\d{1,2}日\d{1,2}点)
  • 两个(\d{4}年\d{1,2}月\d{1,2}日\d{1,2}点)就是捕获分组,分别对应开始时间和结束时间
  • 中间的.*用来匹配两个时间之间的任意无关内容(比如“开始,至”这种连接词)

如果要兼容更多日期格式(比如用-或/分隔的日期),可以把正则调整得更灵活:

活动时间:(\d{4}[-/]\d{1,2}[-/]\d{1,2}).*至(\d{4}[-/]\d{1,2}[-/]\d{1,2})

如何提取分组内容?

以Python为例,实际代码可以这么写:

import re

target_str = "618年中大促:2024年6月1日0点开始,至2024年6月18日24点结束,全场满300减50!"
pattern = r"618年中大促:(\d{4}年\d{1,2}月\d{1,2}日\d{1,2}点).*至(\d{4}年\d{1,2}月\d{1,2}日\d{1,2}点)"
match = re.search(pattern, target_str)

if match:
    start_time = match.group(1)
    end_time = match.group(2)
    print(f"活动开始:{start_time}")
    print(f"活动结束:{end_time}")

运行后会输出:

活动开始:2024年6月1日0点
活动结束:2024年6月18日24点

一些实用小提示

  • 如果你的字符串里有多个活动时间,可以用re.findall()来一次性提取所有匹配的结果
  • 测试正则的时候,尽量覆盖所有可能的格式情况,避免出现漏抓或者误抓的问题
  • 如果时间格式特别复杂(比如带时区、中英文混合),可以逐步优化正则,先抓核心的数字部分,再调整格式匹配规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:01:07