如何使用Python正则表达式匹配日期字符串?

如何使用Python正则表达式匹配日期字符串?

介绍

编程语言经常使用日期输入来获取用户数据,例如出生日期、旅行日期、预订日期等。 用户提供的这些日期可以立即使用正则表达式验证其是否合法。 要确定文本是否具有有效的日期格式并从字符串中提取有效日期,请使用正则日期表达式。

在检查日期时,日期的正则表达式(YYYY-MM-DD)应在表达式开头查找四个数字,一个连字符,介于01和12之间的两位数月份,另一个连字符,然后介于01和31之间的两个数字日子。 这就是正则表达式代码的工作原理−

/^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/
Python

此代码支持大多数日期; 然而,不包括不正确的日期,例如2021-04-31和2021-02-29(因为2021年不是闰年)(4月只有30天)。 使用您选择的编程语言提供的工具执行这些测试。

日期格式标准和算法

应使用的通用日期格式为YYYY-MM-DD,根据国际日期标准ISO 8601,易于人和计算机都阅读。 安排这种类型的时间顺序非常简单。

算法

  • 导入re
  • 存储日期字符串
  • 使用re.match匹配日期字符串
  • 打印str.group()

其他方式是使用YYYYMMDD短格式,稍后我们将探讨该格式,该格式也被ISO标准所采用。 那么让我们创建一个满足这些要求的正则表达式。

所用语法

日期必须以四位数字年份开始,范围从0000到9999。 可以通过使用以下内容解释−

/\d{4}/
Python

量词“4”指定我们要恰好四个字符,但数字字符“d”接受0到9之间的任何数字。 (不多也不少)。

/\d{4}-/
Python

随后是用两个数字表示的月份,必要时使用前导零进行填充,范围从01到12。 在这个位置使用“d2”,它代表两个数字,可能很诱人,但是00到99之间的任何月份表示都是可以接受的。

示例

  #导入re功能
  import re
  #将datestring的值存储在变量中
  datestring= '31-08-2022'
  #使用re.match()函数匹配datestring
  str=re.match('(\d{2})[/.-](\d{2})[/.-](\d{4})', datestring)
  #打印str.group()
  print ("The first input date string is", str.group())
  #再用不同的日期格式重新声明datestring变量
  datestring= '2022-08-31'
  #使用re.match()函数将datestring与匹配
  str=re.match('(\d{2})[/.-](\d{2})[/.-](\d{4})', datestring)
  #打印str
  print ("Matching both the date input if it's in the same format or not:", str)
Python

输出

第一个输入日期字符串为31-08-2022
如果两个日期输入格式相同,则匹配两个日期输入: **None**
Python

代码解释

/0[1-9]/
Python

1-9的方括号表示我们将取1到9中的任何数字,但前面的0表示我们需要对0个字符进行字面匹配。

我们对以1开头的月份(10月(10)至12月(12))有一个稍微不同的布局。只有0或1或2个字符可以跟随一个字符。我们的处理方式如下−

/1[0-2]/
Python

方括号中的0-2将从0到2中接受一个字符,而前面的1表示一个字符的文字匹配。

这两个月份表示可以使用管道字符(|)或OR符号(|)组合,我们可以用圆括号将它们括起来以显示它们作为一个单元运行。

/(0[1-9]|1[0-2])/
Python

将此添加到我们的四位数字年份regex中将产生以下结果−

/\d{4}-(0[1-9]|1[0-2])/
Python

然后它跟着另一个连字符(-)−

/\d{4}-(0[1-9]|1[0-2])-/
Python

最后,如果需要,我们可以构造将带有前导零的两位数字日期表示形式的代码,范围从01到31。我们将把一天分成两半,类似于月份的表示方式。

第一天到第九天从0开始,将是我们的第一个重点。从1到9可能跟随这些数字之一(请注意,我们省略了数字0,因为它不是有效的日期表示形式;请参阅下文)−

/0[1-9]/
Python

然后,通过表示我们可以有任意一个数字1或2后面跟着任意一个数字0到9,我们将组合10到19和20到29天−

/[12][0-9]/
Python

方括号[12]表示接受1或2。

此外,我们需要数字3后面跟着数字0或1表示30到31天。

/3[01]/
Python

现在,我们已经用括号将这三个天表示括起来,并使用OR字符(|)将它们分开,我们可以如下分组−

/(0[1-9]|[12][0-9]|3[01])/
Python

最后,我们可以重新连接它们,继续使用我们的表达式−

/\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])/
Python

我们需要在表达式的开始和结尾分别放置字符串开头字符和结束字符,以确保我们仅匹配日期,而不会在其之前或之后匹配其他任何内容−

/^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/
Python

然后你有它了!通过一些聪明的处理,这个正则表达式代码将接受YYYY-MM-DD日期格式。

结论

Python正则表达式可以明确地定位格式为日,月和年的日期。日期是一位数字或以0开头的一位数字,一位数字,两位数字,三位数字或一位数字。月份是一位数字,以0开头的一位数字,1后面跟着0、1或2,或2后面跟着0。年份由数字20和00到99之间的任何数字表示。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册