如何使用Python正则表达式匹配日期字符串?
介绍
编程语言经常使用日期输入来获取用户数据,例如出生日期、旅行日期、预订日期等。 用户提供的这些日期可以立即使用正则表达式验证其是否合法。 要确定文本是否具有有效的日期格式并从字符串中提取有效日期,请使用正则日期表达式。
在检查日期时,日期的正则表达式(YYYY-MM-DD)应在表达式开头查找四个数字,一个连字符,介于01和12之间的两位数月份,另一个连字符,然后介于01和31之间的两个数字日子。 这就是正则表达式代码的工作原理−
此代码支持大多数日期; 然而,不包括不正确的日期,例如2021-04-31和2021-02-29(因为2021年不是闰年)(4月只有30天)。 使用您选择的编程语言提供的工具执行这些测试。
日期格式标准和算法
应使用的通用日期格式为YYYY-MM-DD,根据国际日期标准ISO 8601,易于人和计算机都阅读。 安排这种类型的时间顺序非常简单。
算法
- 导入re
- 存储日期字符串
- 使用re.match匹配日期字符串
- 打印str.group()
其他方式是使用YYYYMMDD短格式,稍后我们将探讨该格式,该格式也被ISO标准所采用。 那么让我们创建一个满足这些要求的正则表达式。
所用语法
日期必须以四位数字年份开始,范围从0000到9999。 可以通过使用以下内容解释−
量词“4”指定我们要恰好四个字符,但数字字符“d”接受0到9之间的任何数字。 (不多也不少)。
随后是用两个数字表示的月份,必要时使用前导零进行填充,范围从01到12。 在这个位置使用“d2”,它代表两个数字,可能很诱人,但是00到99之间的任何月份表示都是可以接受的。
示例
输出
代码解释
1-9的方括号表示我们将取1到9中的任何数字,但前面的0表示我们需要对0个字符进行字面匹配。
我们对以1开头的月份(10月(10)至12月(12))有一个稍微不同的布局。只有0或1或2个字符可以跟随一个字符。我们的处理方式如下−
方括号中的0-2将从0到2中接受一个字符,而前面的1表示一个字符的文字匹配。
这两个月份表示可以使用管道字符(|)或OR符号(|)组合,我们可以用圆括号将它们括起来以显示它们作为一个单元运行。
将此添加到我们的四位数字年份regex中将产生以下结果−
然后它跟着另一个连字符(-)−
最后,如果需要,我们可以构造将带有前导零的两位数字日期表示形式的代码,范围从01到31。我们将把一天分成两半,类似于月份的表示方式。
第一天到第九天从0开始,将是我们的第一个重点。从1到9可能跟随这些数字之一(请注意,我们省略了数字0,因为它不是有效的日期表示形式;请参阅下文)−
然后,通过表示我们可以有任意一个数字1或2后面跟着任意一个数字0到9,我们将组合10到19和20到29天−
方括号[12]表示接受1或2。
此外,我们需要数字3后面跟着数字0或1表示30到31天。
现在,我们已经用括号将这三个天表示括起来,并使用OR字符(|)将它们分开,我们可以如下分组−
最后,我们可以重新连接它们,继续使用我们的表达式−
我们需要在表达式的开始和结尾分别放置字符串开头字符和结束字符,以确保我们仅匹配日期,而不会在其之前或之后匹配其他任何内容−
然后你有它了!通过一些聪明的处理,这个正则表达式代码将接受YYYY-MM-DD日期格式。
结论
Python正则表达式可以明确地定位格式为日,月和年的日期。日期是一位数字或以0开头的一位数字,一位数字,两位数字,三位数字或一位数字。月份是一位数字,以0开头的一位数字,1后面跟着0、1或2,或2后面跟着0。年份由数字20和00到99之间的任何数字表示。