我必须吸收一些数据。这些脚本已经存在,但需要根据新数据进行调整。
所以有一条线:
head = fn.replace(re.search(r'\d{8}_\d{4}', fn).group(),'')
我收到错误:AttributeError: 'NoneType' object has no attribute 'group'
为了解决这个问题,我需要了解这条线上到底发生了什么
我不明白在"替换"之后做了什么。谁能解释一下我在这里发生了什么? r'\d{8}_\d{4}'
是什么意思?
答案 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
。