Wie kann ich eine Musterzeichenfolge aus einem kompilierten regulären Ausdrucksmuster in Python erhalten?

87

Ich habe einen Code wie diesen:

>>> import re
>>> p = re.compile('my pattern')
>>> print p
_sre.SRE_Pattern object at 0x02274380

Ist es möglich, einen String "my pattern"aus einer pVariablen zu erhalten?

Mykola Kharechko
quelle

Antworten:

108
p.pattern

Weitere Informationen zum Modul finden Sie hier: http://docs.python.org/library/re.html

Mikhail Churbanov
quelle
7
Vielen Dank. Ich lese keine Dokumente, weil ich i dir (p) versuche und es nur einige Attribute und Methoden anzeigt. stackoverflow.com/questions/1415924/…
Mykola Kharechko
Ich tat das gleiche, nahm an, dass es keinen einfachen Weg gab, es zu bekommen :)
Anentropic
1
scheint wie in python3 dir (some_compiled_pattern) die Attribute anzeigt, aber nicht in 2.7
David Lam
10
> Warum nicht Dokumente lesen, bevor Sie solche Fragen stellen? Denn wenn Sie googeln, kehrt StackOverflow zuerst zurück. Vollkommen gültige Frage.
Aaron
21

Aus dem Abschnitt "Objekte mit regulären Ausdrücken" der reModuldokumentation:

RegexObject.pattern

Die Musterzeichenfolge, aus der das RE-Objekt kompiliert wurde.

Beispielsweise:

>>> import re
>>> p = re.compile('my pattern')
>>> p
<_sre.SRE_Pattern object at 0x1001ba818>
>>> p.pattern
'my pattern'

Mit dem reModul in Python 3.0 und höher können Sie dies folgendermaßen finden dir(p):

>>> print(dir(p))
['__class__', '__copy__', '__deepcopy__', '__delattr__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__gt__',
'__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', 'findall', 'finditer', 'flags',
'groupindex', 'groups', 'match', 'pattern', 'scanner', 'search',
'split', 'sub', 'subn']

Dies funktioniert jedoch nicht unter Python 2.6 (oder 2.5) - der dirBefehl ist nicht perfekt, daher lohnt es sich immer, die Dokumente zu überprüfen!

>>> print dir(p)
['__copy__', '__deepcopy__', 'findall', 'finditer', 'match', 'scanner',
'search', 'split', 'sub', 'subn']
dbr
quelle
9

Ja:

print p.pattern

Hinweis: Verwenden Sie die dirFunktion in Python, um eine Liste der Mitglieder zu erhalten:

dir(p)

diese Liste:

['__class__', '__copy__', '__deepcopy__', '__delattr__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__',
'__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'findall', 'finditer', 'flags', 'groupindex', 'groups', 'match', 'pattern',
'scanner', 'search', 'split', 'sub', 'subn']
Lasse V. Karlsen
quelle
3
help( value )ist auf der Konsole viel nützlicher.
Jochen Ritzel