AttributeError:' NoneType'对象没有属性' group'

时间:2017-07-29 00:29:24

标签: python regex replace

我必须吸收一些数据。这些脚本已经存在,但需要根据新数据进行调整。

所以有一条线:

head = fn.replace(re.search(r'\d{8}_\d{4}', fn).group(),'')

我收到错误:AttributeError: 'NoneType' object has no attribute 'group'

为了解决这个问题,我需要了解这条线上到底发生了什么 我不明白在"替换"之后做了什么。谁能解释一下我在这里发生了什么? r'\d{8}_\d{4}'是什么意思?

1 个答案:

答案 0 :(得分:2)

re.search正在查找正则表达式模式的匹配并返回正则表达式匹配对象。如果没有匹配则返回None。因此,您无法在“无”上调用.group()

In [38]: re.search(r'921', mystr)
Out[38]: <_sre.SRE_Match object; span=(23, 26), match='921'>

In [39]: mystr
Out[39]: "b'la lala 135\\r\\n 1039 921\\r\\n'"

In [40]: re.search(r'921', mystr)
Out[40]: <_sre.SRE_Match object; span=(23, 26), match='921'>

In [41]: re.search(r'potatoes', mystr)

SRE_Match对象具有group()方法,该方法获取匹配的字符串值。

In [42]: re.search(r'921', mystr).group()
Out[42]: '921'

因此,如果您仍然不清楚它们正在做什么,它会找到与fn中提供的正则表达式模式匹配的字符串re.search()并删除它来自字符串fn,将其替换为''。在这种情况下,它会在fn中找到有8个数字(\d{8})后跟下划线然后又有4个数字(\d{4})的匹配项。所以字符串看起来像12345678_1234