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?

Réponses:


108
p.pattern

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


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']

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']

3
help( value )est beaucoup plus utile sur la console.
Jochen Ritzel le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.