2017-07-29 10 views
-1

Ich muss einige Daten assimilieren. Die Skripte sind bereits vorhanden, müssen jedoch an die neuen Daten angepasst werden.AttributeError: 'NoneType' Objekt hat kein Attribut 'Gruppe'

So gibt es eine Zeile:

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

, wo ich den Fehler: AttributeError: 'NoneType' object has no attribute 'group'

Um dies zu beheben Ich muss verstehen, was eigentlich an dieser Linie los ist.
Und ich verstehe nicht, was nach dem "Ersetzen" getan wird. Kann mir jemand erklären, was hier los ist? Was bedeutet r'\d{8}_\d{4}'?

+0

Dies ist Python, nicht Bash – JETM

+0

Es tut mir leid, Sie haben Recht! Es gibt Skripte in vier oder fünf verschiedenen Sprachen und ich habe es vermasselt! – Leo

+0

Übrigens https://regex101.com –

Antwort

2

re.search findet Übereinstimmungen mit Ihrem Regex-Muster und gibt ein Regex-Übereinstimmungsobjekt zurück. Wenn keine Übereinstimmungen vorhanden sind, wird None zurückgegeben. So können Sie .group() auf Keine aufrufen.

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 Das Objekt hat die group() Verfahren, das den Zeichenfolgenwert des Spiels bekommt.

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

Also, wenn Sie immer noch nicht klar, was es ist alles zu tun, es zu finden, die Zeichenfolge fn, die das RegexMuster in re.search() versehen paßt und entfernt sie aus dem String fn indem sie sie mit '' ersetzen. In diesem Fall werden Übereinstimmungen in fn gefunden, die 8 Ziffern (\d{8}) haben, gefolgt von einem Unterstrich und dann 4 weiteren Ziffern (\d{4}). also Saiten, die wie 12345678_1234 aussehen.

+0

in Ordnung, und die 'group()' gibt die ganze Zeichenfolge zurück? – Leo

+0

Vielen Dank! Ich denke, ich verstehe es! :) – Leo

+0

@Leo Gruppe (0) oder Gruppe() wäre die ganze passende Zeichenfolge –

Verwandte Themen