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

如何用re.sub()捕获组提取并重组字符串中的时间日期信息?

Python正则替换修复:时间日期格式重组

问题说明

原代码中re.sub()的第二个参数误用了print(lambda m: print(m[1])),完全无法实现格式转换需求。我们需要替换为自定义处理逻辑,将输入字符串里的日期+时间区间,转换为指定格式:(YYYY_-_MM_-_DD hh:mm am/pm_--_hh:mm am/pm)。

修复后的代码

import re

def format_time_date(match):
    # 提取匹配到的日期、开始时间、结束时间
    formatted_date = match.group(1).replace('-', '_-_')
    start_time = match.group(2)
    end_time = match.group(3)
    # 拼接成目标格式
    return f"({formatted_date} {start_time}_--_{end_time})"

# 正则规则:匹配日期+开始时间+分隔符+结束时间的结构
pattern = r'(\d{4}-\d{2}-\d{2})\s+(\d{1,2}:\d{2}\s+(?:am|pm))\s+-\s+(\d{1,2}:\d{2}\s+(?:am|pm))'

# 测试用例
test_inputs = [
    "2023-10-05 09:00 am - 11:00 am",
    "2024-02-29 2:30 pm - 4:15 pm",
    "2023-12-25 12:00 am - 12:00 pm",
    "2024-01-01 10:00 pm - 11:59 pm"
]

for input_str in test_inputs:
    result = re.sub(pattern, format_time_date, input_str)
    print(result)

输出结果

(2023_-_10_-_05 09:00 am_--_11:00 am)
(2024_-_02_-_29 2:30 pm_--_4:15 pm)
(2023_-_12_-_25 12:00 am_--_12:00 pm)
(2024_-_01_-_01 10:00 pm_--_11:59 pm)

关键细节

  • 正则表达式拆解:
    • (\d{4}-\d{2}-\d{2}):匹配YYYY-MM-DD格式的日期,作为第一个分组
    • (\d{1,2}:\d{2}\s+(?:am|pm)):匹配带am/pm的时间(支持1位或2位小时),作为第二、第三个分组
    • \s+-\s+:匹配时间区间之间的分隔符(前后允许任意空格)
  • 替换逻辑:直接将自定义函数传给re.sub(),函数内部处理分组内容,生成目标格式字符串,无需多余的print或嵌套lambda操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:10:29