Code: Alles auswählen
>>> line = "40550 Cortex 0 -20 -282 1 0 27529 [] 21 1"
>>> import re
>>> p = re.compile("[a-z]+")
>>> p
<_sre.SRE_Pattern object at 0x013135A0>
>>> s = p.search(line)
>>> s
<_sre.SRE_Match object at 0x0137ED78>
>>> dir(s)
['__class__', '__copy__', '__deepcopy__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'end', 'endpos', 'expand', 'group', 'groupdict', 'groups', 'lastgroup', 'lastindex', 'pos', 're', 'regs', 'span', 'start', 'string']
>>> s.string
'40550 Cortex 0 -20 -282 1 0 27529 [] 21 1'
>>> s.groups()
()
>>> s.span()
(7, 12)
>>>
1. Warum wird die zu durchsuchende Zeichenkette innerhalb einer Methode auf das Muster angewandt? Das ist zu Beginn extrem unintuitiv. Ich würde es jederzeit genau andersherum tun wollen.
2. Wenn eine Übereinstimmung gefunden wurde, befindet sich in s.string die gesamte vorherige Zeichenkette, in der die Übereinstimmung gefunden wurde. Welchen Sinn hat das denn? Ich will ja nur die jeweilige Übereinstimmung auslesen.
3. Die Methode search() stoppt nach dem ersten Fund. HALLO GEHT'S NOCH? Ich will natürlich alle Wörter eines bestimmten Musters herausfinden. Also man nimmt findall, split usw.
Nun habe ich folgendes Verhalten beobachtet:
Code: Alles auswählen
>>> re.split("\W+", line)
['40550', 'Cortex', '0', '20', '282', '1', '0', '27529', '21', '1']
>>> p = re.compile("\W")
>>> re.split(p, line)
['40550', 'Cortex', '0', '', '20', '', '282', '1', '0', '27529', '', '', '', '21', '1']
Das man die Methoden direkt vom re-Modul abrufen kann oder auf pattern-Objekte anwenden kann, verführt anfangs zusätzlich.
Was meinen Sie?