正则表达式识别日期

正则表达式识别日期

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

    import re
    
    def extract_dates(text):
        # 正则表达式,用于识别常见的日期格式
        date_pattern = r"""(?P
            (?P\d{4}(?![\d年]))|                                       # 单独的年份,如 2012,2017
            (?P\d{4})[-/年.](?P\d{1,2})[-/月.]?(?P\d{1,2})?[日]?|  # YYYY-MM-DD 或 YYYY/MM/DD 或 YYYY.MM.DD 或 YYYY年MM月DD日
            (?P\d{1,2})[-/.](?P\d{1,2})[-/.](?P\d{4})|        # DD-MM-YYYY 或 DD/MM/YYYY 或 DD.MM.YYYY
            (?P\d{1,2})[-/.](?P\d{1,2})[-/.](?P\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**。整个正则表达式的目的是匹配一个完整的日期字符串,这个捕获组将包含最终匹配的日期。
    2. (?P\d{4}(?![\d年])):这是一个命名捕获组,名为**year_only。它用于捕获仅包含4位数字的年份(例如2012,2017)。(?![\d年])**是一个否定向前查找,表示年份后面不能是数字或“年”。
    3. |:表示或,用于在正则表达式中表示多个备选项之一。
    4. (?P\d{4})[-/年.](?P\d{1,2})[-/月.]?(?P\d{1,2})?[日]?:这是一个命名捕获组,分别名为**yearmonthday**。这个捕获组用于识别格式为 YYYY-MM-DD、YYYY/MM/DD、YYYY.MM.DD 或 YYYY年MM月DD日的日期。
    5. |:再次表示或,用于在正则表达式中表示多个备选项之一。
    6. (?P\d{1,2})[-/.](?P\d{1,2})[-/.](?P\d{4}):这是一个命名捕获组,分别名为**day2month2year2**。这个捕获组用于识别格式为 DD-MM-YYYY、DD/MM/YYYY 或 DD.MM.YYYY 的日期。
    7. |:再次表示或,用于在正则表达式中表示多个备选项之一。
    8. (?P\d{1,2})[-/.](?P\d{1,2})[-/.](?P\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()函数可以帮助我们在一个字符串中查找与正则表达式匹配的子串,并将它们以不同的形式返回。使用这三个函数可以让我们更加方便地处理复杂的字符串。

你可能感兴趣的:(python相关,正则表达式,python,开发语言)