我正在尝试为以下日期变体创建正则表达式模式: 日期变体示例如下:
04/20/2009
04/20/09
4/20/09
4/3/09
只要在输入字符串中遇到类似的模式,就会识别出与定义的正则表达式模式匹配的日期
我的方法: 我将整个日期分为月份,日期和年份部分,并创建了正则表达式对象:
month = re.compile(r'(^0?[1-9]$)|(^1[0-2]$)').search('04').group()
day = re.compile(r'(^0?[1-9]$)|(^[12][0-
9]$)|^3[01]$').search('20').group()
year = re.compile(r'(^(19)?\d\d$)|
(^(20)\d\d$)').search('2009').group()
print(month, day, year)
它们各自工作正常,我正在获得预期的输出;例如: 输入字符串: 分别是month ='04',day = '20'和year ='2009'
O / P:分别为2009年4月20日
面临的问题: 但是,当我将这三个部分(月,日,年)组合成一个正则表达式模式时,却遇到了错误。
date = re.compile(r'(^0?[1-9]$)|(^1[0-2]$)[/-](^0?[1-9]$)|(^[12][0-
9]$)|(^3[01]$)[/-](^(19)?\d\d$)|(^(20)\d\d$)')
output = date.search('04/20/2009').group()
错误:AttributeError追溯(大多数 ()最近拨打的电话() 1日期= re.compile(r'(^ 0?[1-9] $)|(^ 1 [0-2] $)/-|(^ [12] [0-9] $)|(^ 3 [01] $)/-|(^(20)\ d \ d $)') ----> 2输出= date.search('04 / 20/2009')。group() AttributeError:'NoneType'对象没有属性'group'
请告诉我,哪里出了问题? 如何借助单个正则表达式模式找到整个日期(月,日,年)? 提前致谢! 总结
答案 0 :(得分:0)
^
表示行的开头(带有多行标志)或字符串的开头
$
表示行尾/字符串。因此,将其添加到正则表达式的所有部分将导致不匹配。
您还只想匹配分组的日/月/年
尝试:
^(0?[1-9]|1[0-2])[\/-](0?[1-9]|[12][0-9]|3[01])[\/-]((?:19)?\d\d|(?:20)\d\d)$
请参阅:https://regex101.com/r/eZ2Kx1/1/
尤其要注意:(?:19)
和(?:20)
是非捕获组
但这只是正则表达式的一部分。我不了解Python,但我猜match [0]是完全匹配,因此您可能需要在这里进行更多编程。