当前位置: 首页 > news >正文

正则表达式识别日期

正则表达式识别日期

  • 正则表达式识别各种格式的日期

    import redef extract_dates(text):# 正则表达式,用于识别常见的日期格式date_pattern = r"""(?P<date>(?P<year_only>\d{4}(?![\d年]))|                                       # 单独的年份,如 2012,2017(?P<year>\d{4})[-/年.](?P<month>\d{1,2})[-/月.]?(?P<day>\d{1,2})?[日]?|  # YYYY-MM-DD 或 YYYY/MM/DD 或 YYYY.MM.DD 或 YYYY年MM月DD日(?P<day2>\d{1,2})[-/.](?P<month2>\d{1,2})[-/.](?P<year2>\d{4})|        # DD-MM-YYYY 或 DD/MM/YYYY 或 DD.MM.YYYY(?P<month3>\d{1,2})[-/.](?P<day3>\d{1,2})[-/.](?P<year3>\d{2,4})        # MM-DD-YYYY 或 MM/DD/YYYY 或 MM.DD.YYYY)"""# 使用正则表达式查找日期"""re.VERBOSE是一个Python中的re模块的标志,用于在正则表达式中添加注释。使用re.VERBOSE可以让你在写复杂的正则表达式时更方便地组织你的代码,因为它允许你在正则表达式中使用注释,这样可以增强代码的可读性和可维护性。当你使用re.VERBOSE时,你需要在正则表达式中添加注释,注释可以是单行或多行的字符串。在注释中可以写明正则表达式的作用、匹配逻辑等等,以便于其他人理解和修改代码。"""matches = re.finditer(date_pattern, text, re.VERBOSE)result = []# 将匹配的日期添加到结果列表中for match in matches:
    """date_str = match.group('date'):从匹配结果中提取名为date的捕获组,即整个日期字符串。"""date_str = match.group('date')result.append(date_str)return result# 示例
    text = "这个报告是关于2010年3月3日的事件。昨天,即2023/4/10,我们讨论了2012年的计划。2010年3月,我们启动了一个新项目。"
    print(extract_dates(text))
    

    输出结果

    ['2010年3月3日', '2023', '2010年3月']
    
  • 正则表达式解释、程序解释

    这是一个用于从文本中提取日期的Python程序。程序定义了一个正则表达式**date_pattern来匹配常见的日期格式,然后使用re.finditer()**在给定文本中查找匹配的日期。匹配的日期将添加到结果列表中并返回。

    现在,让我们详细解释**date_pattern**正则表达式中的各个部分:

    1. (?P<date>:这是一个命名捕获组,名为**date**。整个正则表达式的目的是匹配一个完整的日期字符串,这个捕获组将包含最终匹配的日期。
    2. (?P<year_only>\d{4}(?![\d年])):这是一个命名捕获组,名为**year_only。它用于捕获仅包含4位数字的年份(例如2012,2017)。(?![\d年])**是一个否定向前查找,表示年份后面不能是数字或“年”。
    3. |:表示或,用于在正则表达式中表示多个备选项之一。
    4. (?P<year>\d{4})[-/年.](?P<month>\d{1,2})[-/月.]?(?P<day>\d{1,2})?[日]?:这是一个命名捕获组,分别名为**yearmonthday**。这个捕获组用于识别格式为 YYYY-MM-DD、YYYY/MM/DD、YYYY.MM.DD 或 YYYY年MM月DD日的日期。
    5. |:再次表示或,用于在正则表达式中表示多个备选项之一。
    6. (?P<day2>\d{1,2})[-/.](?P<month2>\d{1,2})[-/.](?P<year2>\d{4}):这是一个命名捕获组,分别名为**day2month2year2**。这个捕获组用于识别格式为 DD-MM-YYYY、DD/MM/YYYY 或 DD.MM.YYYY 的日期。
    7. |:再次表示或,用于在正则表达式中表示多个备选项之一。
    8. (?P<month3>\d{1,2})[-/.](?P<day3>\d{1,2})[-/.](?P<year3>\d{2,4}):这是一个命名捕获组,分别名为**month3day3year3**。这个捕获组用于识别格式为 MM-DD-YYYY、MM/DD/YYYY 或 MM.DD.YYYY 的日期。
    9. ):这是命名捕获组**date**的结尾括号。
  • re.find相关

    1. re.find
      re.find(pattern, string)函数可以用于在字符串中查找与正则表达式匹配的第一个子串,并返回匹配的对象。如果没有匹配到任何子串,则返回None。该函数只会返回找到的第一个匹配结果。
    2. re.finditer
      re.finditer(pattern, string)函数可以在字符串中查找与正则表达式匹配的所有子串,并返回一个迭代器。迭代器返回的每个元素都是匹配结果的对象。
    3. re.findall
      re.findall(pattern, string)函数可以用于在字符串中查找与正则表达式匹配的所有子串,并将它们以列表的形式返回。与re.finditer()返回的迭代器不同,re.findall()返回的是包含所有匹配结果的列表。如果没有找到匹配的子串,则返回一个空列表。
      总之,re.find()、re.finditer()和re.findall()函数可以帮助我们在一个字符串中查找与正则表达式匹配的子串,并将它们以不同的形式返回。使用这三个函数可以让我们更加方便地处理复杂的字符串。
http://www.lryc.cn/news/58681.html

相关文章:

  • 如何设计一个秒杀架构设计?
  • Elasticsearch:配置选项
  • 消息中间件Kafka分布式数据处理平台+ZooKeeper
  • Linux 用户文件磁盘网络进程指令
  • 如何使用Socks5代理IP提高网络安全性
  • 《Java8实战》第3章 Lambda 表达式
  • 开放式耳机的颠覆之作!南卡OE Pro新皇降临!佩戴和音质双重突破
  • 生成器设计模式(Builder Design Pattern)[论点:概念、图示、示例、框架中的应用、场景]
  • JUC并发工具
  • java面试题-基础问题-如何理解Java中的多态?
  • 03.vue3的计算属性
  • Ceph性能调优
  • 机器学习-问答题准备(英文)-更新中
  • 展示演示软件设计制作(C语言)
  • Android 自定义view 入门 案例
  • [imangazaliev/didom]一个简单又快速的DOM操作库
  • Cookie和Session的工作流程及区别(附代码案例)
  • 适用于高级别自动驾驶的驾驶员可预见误用仿真测试
  • Linux之进程知识点
  • 一种供水系统物联网监测系统
  • Linux驱动开发——字符设备(2)
  • 【MySQL数据库原理】MySQL Community安装与配置
  • 【ROS参数服务器增删改c++操作1】
  • elasticsearch 常用数据类型详解和范例
  • 力扣119杨辉三角 II:代码实现 + 方法总结(数学规律法 记忆法/备忘录)
  • 安装pandas遇到No module named ‘_bz2’ 的解决方案
  • 【数据治理-05】什么数据才是货真价实的数据资产,一起聊聊数据资产
  • 第三章 ARM处理器体系结构【嵌入式系统】
  • 最速下降法
  • R语言实践——ggplot2+ggrepel绘制散点+优化注释文本位置