Python正则表达式抛出AttributeError:'NoneType'对象没有属性'group'

时间:2018-09-06 09:50:44

标签: regex python-3.x

我正在尝试为以下日期变体创建正则表达式模式: 日期变体示例如下:

  • 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'

请告诉我,哪里出了问题? 如何借助单个正则表达式模式找到整个日期(月,日,年)? 提前致谢! 总结

1 个答案:

答案 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]是完全匹配,因此您可能需要在这里进行更多编程。