【问题标题】:Python Regular Expression throwing AttributeError: 'NoneType' object has no attribute 'group'Python正则表达式抛出AttributeError:'NoneType'对象没有属性'group'
【发布时间】:2018-09-06 09:50:43
【问题描述】:

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

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

单独他们工作正常,我得到了预期的输出;例如: 输入字符串: 月='04',日='20',年='2009'

O/P: 04 20 2009

面临的问题: 但是,当我将这三个部分(月、日、年)组合成一个正则表达式模式时,我遇到了错误。

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 Traceback(大多数 最近通话最后)在() 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”对象没有属性“组”

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

【问题讨论】:

  • @Fallenhero 感谢您是否还可以展示处理此问题的正确方法,除了通过告诉一切都是错误的来结束讨论!我在这样的论坛上发布了我的查询,以纠正我的错误并了解更好的编码方式

标签: regex python-3.x


【解决方案1】:

^ 表示行的开头(带有多行标志)或字符串的开头 $ 表示行尾/字符串。因此,将其添加到正则表达式的所有部分将导致不匹配。

您也只想匹配分组的日/月/年

尝试: ^(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] 是完全匹配的,所以你可能需要在这里做更多的编程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-19
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2017-12-28
    • 2017-10-05
    相关资源
    最近更新 更多