正则表达式识别日期
正则表达式识别日期
-
正则表达式识别各种格式的日期
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
正则表达式中的各个部分:(?P<date>
:这是一个命名捕获组,名为date
。整个正则表达式的目的是匹配一个完整的日期字符串,这个捕获组将包含最终匹配的日期。(?P<year_only>\\d{4}(?![\\d年]))
:这是一个命名捕获组,名为year_only
。它用于捕获仅包含4位数字的年份(例如2012,2017)。(?![\\d年])
是一个否定向前查找,表示年份后面不能是数字或“年”。|
:表示或,用于在正则表达式中表示多个备选项之一。(?P<year>\\d{4})[-/年.](?P<month>\\d{1,2})[-/月.]?(?P<day>\\d{1,2})?[日]?
:这是一个命名捕获组,分别名为year
、month
和day
。这个捕获组用于识别格式为 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})
:这是一个命名捕获组,分别名为day2
、month2
和year2
。这个捕获组用于识别格式为 DD-MM-YYYY、DD/MM/YYYY 或 DD.MM.YYYY 的日期。|
:再次表示或,用于在正则表达式中表示多个备选项之一。(?P<month3>\\d{1,2})[-/.](?P<day3>\\d{1,2})[-/.](?P<year3>\\d{2,4})
:这是一个命名捕获组,分别名为month3
、day3
和year3
。这个捕获组用于识别格式为 MM-DD-YYYY、MM/DD/YYYY 或 MM.DD.YYYY 的日期。)
:这是命名捕获组date
的结尾括号。
-
re.find相关
- re.find
re.find(pattern, string)
函数可以用于在字符串中查找与正则表达式匹配的第一个子串,并返回匹配的对象。如果没有匹配到任何子串,则返回None。该函数只会返回找到的第一个匹配结果。 - re.finditer
re.finditer(pattern, string)
函数可以在字符串中查找与正则表达式匹配的所有子串,并返回一个迭代器。迭代器返回的每个元素都是匹配结果的对象。 - re.findall
re.findall(pattern, string)
函数可以用于在字符串中查找与正则表达式匹配的所有子串,并将它们以列表的形式返回。与re.finditer()返回的迭代器不同,re.findall()返回的是包含所有匹配结果的列表。如果没有找到匹配的子串,则返回一个空列表。
总之,re.find()、re.finditer()和re.findall()函数可以帮助我们在一个字符串中查找与正则表达式匹配的子串,并将它们以不同的形式返回。使用这三个函数可以让我们更加方便地处理复杂的字符串。
- re.find