时间正则表达式

时间正则表达式

在日常的开发工作中,我们经常需要对时间进行格式化、提取、比较等操作。正则表达式是一种强大的工具,可以用来处理各种形式的时间。在本文中,我们将介绍一些常用的时间正则表达式及其用法。

基础正则表达式符号

在使用时间正则表达式之前,我们需要先了解几个最基本的正则表达式符号:
* . : 匹配任何单个字符。
* * : 匹配前面的子表达式零次或多次。
* + : 匹配前面的子表达式一次或多次。
* ? : 匹配前面的子表达式零次或一次。
* ^ : 匹配输入字符串的开始位置。
* $ : 匹配输入字符串的结束位置。
* {} : 指定前面的字符、字符集合或子表达式的重复次数。

时间格式正则表达式

下面是几种常用的时间格式正则表达式:

  1. 匹配HH:MM格式的时间
^([01]\d|2[0-3]):[0-5]\d$

示例代码:

import re

pattern = re.compile(r'^([01]\d|2[0-3]):[0-5]\d$')
match1 = pattern.match('12:20')
match2 = pattern.match('23:59')
match3 = pattern.match('25:30')
print(match1) # <re.Match object; span=(0, 5), match='12:20'>
print(match2) # <re.Match object; span=(0, 5), match='23:59'>
print(match3) # None
  1. 匹配YYYY-MM-DD格式的日期
^((19|20)\d{2})-(0[1-9]|1[0-2])-([0-2]\d|3[01])$

示例代码:

import re

pattern = re.compile(r'^((19|20)\d{2})-(0[1-9]|1[0-2])-([0-2]\d|3[01])$')
match1 = pattern.match('2021-12-31')
match2 = pattern.match('2021-02-29')
match3 = pattern.match('21-01-01')
print(match1) # <re.Match object; span=(0, 10), match='2021-12-31'>
print(match2) # None
print(match3) # None
  1. 匹配YYYY-MM-DD HH:MM格式的日期时间
^((19|20)\d{2})-(0[1-9]|1[0-2])-([0-2]\d|3[01])\s+([01]\d|2[0-3]):[0-5]\d$

示例代码:

import re

pattern = re.compile(r'^((19|20)\d{2})-(0[1-9]|1[0-2])-([0-2]\d|3[01])\s+([01]\d|2[0-3]):[0-5]\d$')
match1 = pattern.match('2021-12-31 23:59')
match2 = pattern.match('2021-02-29 12:34')
match3 = pattern.match('2021-01-01 25:30')
print(match1) # <re.Match object; span=(0, 16), match='2021-12-31 23:59'>
print(match2) # <re.Match object; span=(0, 16), match='2021-02-29 12:34'>
print(match3) # None

时间提取正则表达式

有时我们需要从一段文本中提取出其中包含的时间,这时我们可以使用时间提取正则表达式。下面是几种常用的时间提取正则表达式:

  1. 提取HH:MM格式的时间
([01]\d|2[0-3]):[0-5]\d

示例代码:

“`pythonimport re

text = 'Hello, the meeting will start at 14:30. Please be on time.'
pattern = re.compile(r'([01]\d|2[0-3]):[0-5]\d')
match = pattern.search(text)
print(match.group()) # 14:30

<pre><code class="line-numbers">2. 提取YYYY-MM-DD格式的日期
“`regex
(19|20)\d{2}-(0[1-9]|1[0-2])-([0-2]\d|3[01])

示例代码:

import re

text = 'The program was last updated on 2021-10-01.'
pattern = re.compile(r'(19|20)\d{2}-(0[1-9]|1[0-2])-([0-2]\d|3[01])')
match = pattern.search(text)
print(match.group()) # 2021-10-01
  1. 提取YYYY-MM-DD HH:MM格式的日期时间
(19|20)\d{2}-(0[1-9]|1[0-2])-([0-2]\d|3[01])\s+([01]\d|2[0-3]):[0-5]\d

示例代码:

import re

text = 'The meeting will start at 2021-12-31 23:59. Don\'t be late.'
pattern = re.compile(r'(19|20)\d{2}-(0[1-9]|1[0-2])-([0-2]\d|3[01])\s+([01]\d|2[0-3]):[0-5]\d')
match = pattern.search(text)
print(match.group()) # 2021-12-31 23:59

时间比较正则表达式

有时我们需要判断两个时间的先后关系,这时我们可以使用时间比较正则表达式。下面是几种常用的时间比较正则表达式:

  1. 判断HH:MM格式的时间先后关系
^([01]\d|2[0-3]):[0-5]\d(AM|PM)?\s*(<|<=|>|>=|=)\s*([01]\d|2[0-3]):[0-5]\d(AM|PM)?$

示例代码:

import re

pattern = re.compile(r'^([01]\d|2[0-3]):[0-5]\d(AM|PM)?\s*(<|<=|>|>=|=)\s*([01]\d|2[0-3]):[0-5]\d(AM|PM)?$')

# 12:30 PM < 1:30 PM
match1 = pattern.match('12:30 PM < 1:30 PM')
print(match1) # <re.Match object; span=(0, 16), match='12:30 PM < 1:30 PM'>

# 10:00 <= 11:00
match2 = pattern.match('10:00 <= 11:00')
print(match2) # <re.Match object; span=(0, 12), match='10:00 <= 11:00'>

# 2:00 PM >= 1:00 PM
match3 = pattern.match('2:00 PM >= 1:00 PM')
print(match3) # <re.Match object; span=(0, 16), match='2:00 PM >= 1:00 PM'>

# Invalid format
match4 = pattern.match('12:30 PM < 13:30 PM')
print(match4) # None

# Invalid time
match5 = pattern.match('25:30 < 12:30 PM')
print(match5) # None
  1. 判断YYYY-MM-DD格式的日期先后关系
^((19|20)\d{2})-(0[1-9]|1[0-2])-([0-2]\d|3[01])(<|<=|>|>=|=)((19|20)\d{2})-(0[1-9]|1[0-2])-([0-2]\d|3[01])$

示例代码:

import re

pattern = re.compile(r'^((19|20)\d{2})-(0[1-9]|1[0-2])-([0-2]\d|3[01])(<|<=|>|>=|=)((19|20)\d{2})-(0[1-9]|1[0-2])-([0-2]\d|3[01])$')

# 2021-10-01 <= 2022-01-01
match1 = pattern.match('2021-10-01 <= 2022-01-01')
print(match1) # <re.Match object; span=(0, 20), match='2021-10-01 <= 2022-01-01'>

# 2025-12-01 >= 2024-01-01
match2 = pattern.match('2025-12-01 >= 2024-01-01')
print(match2) # <re.Match object; span=(0, 20), match='2025-12-01 >= 2024-01-01'>

# Invalid format
match3 = pattern.match('2021-13-01 <= 2022-01-01')
print(match3) # None

# Invalid date
match4 = pattern.match('2022-02-30 > 2022-02-01')
print(match4) # None
  1. 判断YYYY-MM-DD HH:MM格式的日期时间先后关系
^((19|20)\d{2})-(0[1-9]|1[0-2])-([0-2]\d|3[01])\s+([01]\d|2[0-3]):[0-5]\d(<|<=|>|>=|=)((19|20)\d{2})-(0[1-9]|1[0-2])-([0-2]\d|3[01])\s+([01]\d|2[0-3]):[0-5]\d$

示例代码:

import re

pattern = re.compile(r'^((19|20)\d{2})-(0[1-9]|1[0-2])-([0-2]\d|3[01])\s+([01]\d|2[0-3]):[0-5]\d(<|<=|>|>=|=)((19|20)\d{2})-(0[1-9]|1[0-2])-([0-2]\d|3[01])\s+([01]\d|2[0-3]):[0-5]\d$')

# 2021-12-31 23:59 <= 2022-01-01 00:00
match1 = pattern.match('2021-12-31 23:59 <= 2022-01-01 00:00')
print(match1) # <re.Match object; span=(0, 30), match='2021-12-31 23:59 <= 2022-01-01 00:00'>

# 2021-01-01 00:00 >= 2020-12-31 23:59
match2 = pattern.match('2021-01-01 00:00 >= 2020-12-31 23:59')
print(match2) # <re.Match object; span=(0, 30), match='2021-01-01 00:00 >= 2020-12-31 23:59'>

# Invalid format
match3 = pattern.match('2021-13-01 <= 2022-01-01 01:00')
print(match3) # None

# Invalid date
match4 = pattern.match('2022-02-30 > 2022-02-01 12:34')
print(match4) # None

# Invalid time
match5 = pattern.match('2022-01-01 24:00 > 2021-12-31 23:59')
print(match5) # None

结论

通过本文,我们了解了常用的时间正则表达式及其用法。在实际的开发工作中,我们可以根据需要选择相应的正则表达式进行处理。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程