unu*_*tbu 45
而不是使用正则表达式,通常最好将字符串解析为datetime.datetime对象:
In [140]: datetime.datetime.strptime("11/12/98","%m/%d/%y")
Out[140]: datetime.datetime(1998, 11, 12, 0, 0)
In [141]: datetime.datetime.strptime("11/12/98","%d/%m/%y")
Out[141]: datetime.datetime(1998, 12, 11, 0, 0)
Run Code Online (Sandbox Code Playgroud)
然后,您可以访问日,月和年(以及小时,分钟和秒)作为datetime.datetime对象的属性:
In [143]: date.year
Out[143]: 1998
In [144]: date.month
Out[144]: 11
In [145]: date.day
Out[145]: 12
Run Code Online (Sandbox Code Playgroud)
要测试由正斜杠分隔的数字序列是否表示有效日期,您可以使用try..except块.无效日期会引发ValueError:
In [159]: try:
.....: datetime.datetime.strptime("99/99/99","%m/%d/%y")
.....: except ValueError as err:
.....: print(err)
.....:
.....:
time data '99/99/99' does not match format '%m/%d/%y'
Run Code Online (Sandbox Code Playgroud)
如果需要搜索更长的字符串以查找日期,可以使用正则表达式搜索由正斜杠分隔的数字:
In [146]: import re
In [152]: match = re.search(r'(\d+/\d+/\d+)','The date is 11/12/98')
In [153]: match.group(1)
Out[153]: '11/12/98'
Run Code Online (Sandbox Code Playgroud)
当然,无效日期也将匹配:
In [154]: match = re.search(r'(\d+/\d+/\d+)','The date is 99/99/99')
In [155]: match.group(1)
Out[155]: '99/99/99'
Run Code Online (Sandbox Code Playgroud)
要检查match.group(1)返回有效的日期字符串,您可以使用datetime.datetime.strptime如上所示解析它.
我发现以下 RE 在以下格式中对 Date 工作正常;
它可以接受 2000-2099 年
请不要忘记在最后添加 $,如果没有它接受 14-11-201 或 20177
date="13-11-2017"
x=re.search("^([1-9] |1[0-9]| 2[0-9]|3[0-1])(.|-)([1-9] |1[0-2])(.|-|)20[0-9][0-9]$",date)
x.group()
Run Code Online (Sandbox Code Playgroud)
输出 = '13-11-2017'
我在 @aditya Prakash appraoch 之上构建了我的解决方案:
print(re.search("^([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])(\.|-|/)([1-9]|0[1-9]|1[0-2])(\.|-|/)([0-9][0-9]|19[0-9][0-9]|20[0-9][0-9])$|^([0-9][0-9]|19[0-9][0-9]|20[0-9][0-9])(\.|-|/)([1-9]|0[1-9]|1[0-2])(\.|-|/)([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])$",'01/01/2018'))
Run Code Online (Sandbox Code Playgroud)
第一部分 ( ^([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])(\.|-|/)([1-9]|0[1-9]|1[0-2])(\.|-|/)([0-9][0-9]|19[0-9][0-9]|20[0-9][0-9])$) 可以处理以下格式:
第二部分 ( ^([0-9][0-9]|19[0-9][0-9]|20[0-9][0-9])(\.|-|/)([1-9]|0[1-9]|1[0-2])(\.|-|/)([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])$) 基本上可以执行相同的操作,但顺序相反,其中首先是年份,然后是月份,然后是日期。
作为分隔符,它允许 .、/、-。作为年份,它允许从 1900 年到 2099 年的所有内容,也可以只给出两个数字。
如果您有改进建议,请在评论中告诉我,以便我更新答案。
我用这样的东西
>>> import datetime
>>> regex = datetime.datetime.strptime
>>>
>>> # TEST
>>> assert regex('2020-08-03', '%Y-%m-%d')
>>>
>>> assert regex('2020-08', '%Y-%m-%d')
ValueError: time data '2020-08' does not match format '%Y-%m-%d'
>>> assert regex('08/03/20', '%m/%d/%y')
>>>
>>> assert regex('08-03-2020', '%m/%d/%y')
ValueError: time data '08-03-2020' does not match format '%m/%d/%y'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83015 次 |
| 最近记录: |