Python正则表达式匹配日期与时间及原生字符串详解

不晚
不晚
发布时间:2026-10-13| 3人浏览过
原创

本文介绍Python中使用正则表达式匹配日期与时间的方法,涵盖日期格式如2016-12-12及带时间的2016-12-12 14:34的匹配模式。同时解析原生字符串r的作用,说明其如何简化反斜杠转义处理,避免多重转义带来的困扰,提升代码可读性与准确性。

Python正则表达式匹配日期与时间

本文将介绍如何在Python中使用正则表达式来匹配日期与时间。

日期与时间匹配代码示例


#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'Randy'
import re
from datetime import datetime
test_date = '他的生日是2016-12-12 14:34,是个可爱的小宝贝.二宝的生日是2016-12-21 11:34,好可爱的.'
test_datetime = '他的生日是2016-12-12 14:34,是个可爱的小宝贝.二宝的生日是2016-12-21 11:34,好可爱的.'
# date
mat = re.search(r"(\d{4}-\d{1,2}-\d{1,2})",test_date)
print mat.groups()
# ('2016-12-12',)
print mat.group(0)
# 2016-12-12
date_all = re.findall(r"(\d{4}-\d{1,2}-\d{1,2})",test_date)
for item in date_all:
  print item
# 2016-12-12
# 2016-12-21
# datetime
mat = re.search(r"(\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2})",test_datetime)
print mat.groups()
# ('2016-12-12 14:34',)
print mat.group(0)
# 2016-12-12 14:34
date_all = re.findall(r"(\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2})",test_datetime)
for item in date_all:
  print item
# 2016-12-12 14:34
# 2016-12-21 11:34
## 有效时间
# 如这样的日期2016-12-35也可以匹配到.测试如下.
test_err_date = '如这样的日期2016-12-35也可以匹配到.测试如下.'
print re.search(r"(\d{4}-\d{1,2}-\d{1,2})",test_err_date).group(0)
# 2016-12-35
# 可以加个判断
def validate(date_text):
  try:
    if date_text != datetime.strptime(date_text, "%Y-%m-%d").strftime('%Y-%m-%d'):
      raise ValueError
    return True
  except ValueError:
    # raise ValueError("错误是日期格式或日期,格式是年-月-日")
    return False
print validate(re.search(r"(\d{4}-\d{1,2}-\d{1,2})",test_err_date).group(0))
# false
# 其他格式匹配. 如2016-12-24与2016/12/24的日期格式.
date_reg_exp = re.compile('\d{4}[-/]\d{2}[-/]\d{2}')
test_str= """
   平安夜圣诞节2016-12-24的日子与去年2015/12/24的是有不同哦.
   """
# 根据正则查找所有日期并返回
matches_list=date_reg_exp.findall(test_str)
# 列出并打印匹配的日期
for match in matches_list:
 print match
# 2016-12-24
# 2015/12/24

https://www.pythonxyz.com/10025-python-regex-match-date-time.xyz

原生字符串r的作用解析

此外,还将探讨Python正则表达式中原生字符r的具体作用。

原生字符串r的作用

原生字符串与普通字符串对比示例


>>> mm = "c:\\a\\b\\c"
>>> mm
'c:\\a\\b\\c'
>>> print(mm)
c:\a\b\c
>>> re.match("c:\\\\",mm).group()
'c:\\'
>>> ret = re.match("c:\\\\",mm).group()
>>> print(ret)
c:\
>>> ret = re.match("c:\\\\a",mm).group()
>>> print(ret)
c:\a
>>> ret = re.match(r"c:\\a",mm).group()
>>> print(ret)
c:\a
>>> ret = re.match(r"c:\a",mm).group()
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>>

基本原理说明

在Python中,字符串前加上字母r表示这是一个原生字符串(raw string)。

与多数编程语言类似,正则表达式中使用反斜杠"\"作为转义字符,这可能导致反斜杠的使用变得复杂。例如,若要匹配文本中的单个反斜杠"\",在普通字符串表示的正则表达式中需要编写4个反斜杠"\\\\":前两个反斜杠在编程语言层面转义为一个反斜杠,后两个同样如此,最终在正则表达式引擎中解析为一个实际的反斜杠。

Python的原生字符串机制很好地解决了这一问题。使用原生字符串后,无需担心反斜杠数量的遗漏或错误,正则表达式的书写更加直观且不易出错。


>>> ret = re.match(r"c:\\a",mm).group()
>>> print(ret)
c:\a

总结

以上内容介绍了Python中正则表达式匹配日期与时间的方法,以及对原生字符串r作用的解析,希望能对读者有所帮助。如有任何疑问,欢迎留言,作者将及时回复。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。