讲师中心 微信公众号
AI工具推荐 视频效率加速

提取工作日程中的日期与时间信息:正则表达式实战教程

夜辰小哥_5555

夜辰小哥_5555

发布时间:2026-07-29 22:29:07

|

568人浏览过

|

来源于php中文网

原创

提取工作日程中的日期与时间信息:正则表达式实战教程

本文介绍如何从ocr识别出的杂乱文本中精准提取“日期+时间”片段(如“27 jul12.00 -21.00”),重点讲解基于正则表达式的清洗与结构化方法,兼顾鲁棒性与可维护性。

本文介绍如何从ocr识别出的杂乱文本中精准提取“日期+时间”片段(如“27 jul12.00 -21.00”),重点讲解基于正则表达式的清洗与结构化方法,兼顾鲁棒性与可维护性。

在自动化处理OCR输出(如扫描版排班表、PDF截图或反爬网页)时,原始文本往往夹杂大量干扰符号、换行错位、空格不均甚至乱码(如示例中的 SERWCES 应为 SERVICES)。此时,依赖HTML选择器(如Playwright的 .date-class)并不可行——因为OCR结果不含DOM结构。真正可靠、轻量且可控的方案是:使用正则表达式(regex)从纯文本中锚定并捕获关键模式。

✅ 核心匹配逻辑

观察目标片段(如 Mon, 22.Jul15.00-21.00、27 Jul12.00 -21.00、Tue, 23 Jul15.00-21.00),可归纳出稳定特征:

  • 日期部分:含英文缩写星期(可选)、数字日期(1–31)、英文月份缩写(Jan–Dec),后紧跟时间;
  • 时间部分:HH.MM-HH.MM 或 HH:MM-HH:MM 格式,中间可能有空格、短横、全角符号;
  • 关键锚点:日期与时间之间无换行、无长段分隔符,通常紧邻出现。

据此,推荐以下正则表达式:

import re

text = """MySchedule UK & Ireland*************** (Custo_MHS00801682LIPHOOK SERVICESESS...
Mon, 22.Jul15.00-21.008R -17.45 _18.3000801682LIPHOOK SERWCES NORTH
Tue, 23 Jul15.00-21.00
27 Jul12.00 -21.008Rt6:15-17.0000801682 _LIPHOOK SERWCES NORTH
"""

# 精确匹配:支持逗号/点分隔、空格/短横/下划线分隔时间、兼容HH.MM和HH:MM
pattern = r'''
    (?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)?   # 可选星期缩写
    [,.\s]*                           # 可选标点或空格
    (\d{1,2})                          # 日期数字(1–31)
    \s*                                # 可选空格
    (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)  # 月份缩写
    [.\s]*                             # 可选标点或空格
    (\d{1,2}\.?[\d]{0,2}[-:\s_]*\d{1,2}\.?[\d]{0,2})  # 时间段(如 15.00-21.00, 12.00 -21.00, 6:15-17:00)
'''

matches = re.findall(pattern, text, re.IGNORECASE | re.VERBOSE)
for day, month, time_range in matches:
    print(f"{day} {month} {time_range.strip()}")

输出示例:

22 Jul 15.00-21.00
23 Jul 15.00-21.00
27 Jul 12.00 -21.00

⚠️ 注意事项与增强建议

  • OCR容错:若月份被误识为 SERWCES,可预处理替换常见错误(如 re.sub(r'SERWCES', 'SERVICES', text)),或在正则中加入模糊匹配(需结合 regex 库的 (?e) 模式);
  • 避免过匹配:原始文本含 00801682 等数字串,务必用 \b 单词边界或上下文限定(如要求月份后紧跟时间),防止匹配到ID;
  • 结构化输出:建议将结果转为 list[dict],便于后续处理:
    result = [
        {"date": f"{d} {m}", "time": t.strip(), "raw": match.group(0)}
        for match in re.finditer(pattern, text, re.IGNORECASE | re.VERBOSE)
        for d, m, t in [match.groups()]
    ]
  • 备选方案:若正则仍不稳定,可先用 re.split(r'[;*]+', text) 切分区块,再对每块单独匹配,降低噪声干扰。

正则不是万能的,但针对格式相对固定的排班文本,它是比模拟浏览器更轻量、更可控、更易调试的首选方案。掌握锚定逻辑与渐进式调试(先匹配日期,再加时间,最后加星期),即可稳健应对多数OCR清洗场景。

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1671

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4144

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1669

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

23917

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2927

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2967

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1143

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

596

2023.08.10

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 20.8万人学习

JavaScript正则表达式基础与实战
JavaScript正则表达式基础与实战

共11课时 | 1.7万人学习

布尔教育正则表达式视频教程
布尔教育正则表达式视频教程

共14课时 | 5.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn