comment puis-je obtenir une chaîne de modèle à partir d'un modèle de regexp compilé en python

87

J'ai un code comme celui-ci:

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

Est-il possible d'obtenir une chaîne à "my pattern"partir d'une pvariable?

Mykola Kharechko
la source

Réponses:

108
p.pattern

En savoir plus sur le module re ici: http://docs.python.org/library/re.html

Mikhail Churbanov
la source
7
Merci. Je ne lis pas de documentation car j'essaye i dir (p) et il n'affiche que plusieurs attributs et méthodes. stackoverflow.com/questions/1415924/…
Mykola Kharechko
J'ai fait la même chose, supposé qu'il n'y avait pas de moyen simple de l'obtenir :)
Anentropic
1
semble comme dans le répertoire python3 (some_compiled_pattern) affiche les attributs, mais pas dans 2.7
David Lam
10
> Pourquoi ne pas lire la documentation avant de poster de telles questions? Parce que lorsque vous google, StackOverflow revient en premier. Question parfaitement valable.
Aaron
21

Dans la section "Objets d'expression régulière" de la redocumentation du module:

RegexObject.pattern

Chaîne de modèle à partir de laquelle l'objet RE a été compilé.

Par exemple:

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

Avec le remodule en Python 3.0 et supérieur, vous pouvez trouver cela en faisant un simple 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']

Cela ne fonctionne cependant pas sur Python 2.6 (ou 2.5) - la dircommande n'est pas parfaite, il vaut donc toujours la peine de vérifier la documentation!

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

Oui:

print p.pattern

astuce, utilisez la dirfonction en python pour obtenir une liste de membres:

dir(p)

ceci énumère:

['__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
la source
3
help( value )est beaucoup plus utile sur la console.
Jochen Ritzel le