2017-07-29 55 views
-1

我必須同化一些數據。腳本已經存在,但需要根據新數據進行調整。AttributeError:'NoneType'對象沒有屬性'group'

所以有一行:

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

這是Python,而不是Bash – JETM

+0

對不起,你是對的!有四種或五種不同語言的腳本,我搞砸了! – Leo

+0

順便說一句https://regex101.com –

回答

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' 

所以,如果你還搞不清楚那是什麼都在做,它的發現匹配re.search()提供的正則表達式模式,並通過與''替換它從字符串fn刪除它的字符串fn。在這種情況下,它在fn中找到匹配,其中有8位數字(\d{8}),後面跟着下劃線,然後是4位數字(\d{4})。所以字符串看起來像12345678_1234

+0

好吧,'group()'返回整個字符串? – Leo

+0

非常感謝!我想我明白了! :) – Leo

+0

@Leo group(0)或group()將是整個匹配的字符串 –