¿Cómo puedo obtener una cadena de patrón a partir del patrón regexp compilado en Python?

87

Tengo un código como este:

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

¿Es posible obtener una cadena "my pattern"de una pvariable?

Mykola Kharechko
fuente

Respuestas:

108
p.pattern

Lea más sobre el módulo re aquí: http://docs.python.org/library/re.html

Mikhail Churbanov
fuente
7
Gracias. No leo documentos porque trato de i dir (p) y solo muestra varios atributos y métodos. stackoverflow.com/questions/1415924/…
Mykola Kharechko
Hice lo mismo, asumí que no había una forma sencilla de conseguirlo :)
Anentropic
1
parece que en python3 dir (some_compiled_pattern) muestra los atributos, pero no en 2.7
David Lam
10
> ¿Por qué no leer los documentos antes de publicar estas preguntas? Porque cuando google, StackOverflow regresa primero. Pregunta perfectamente válida.
Aaron
21

Desde la sección "Objetos de expresión regular" de la redocumentación del módulo:

RegexObject.pattern

La cadena de patrón a partir de la cual se compiló el objeto RE.

Por ejemplo:

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

Con el remódulo en Python 3.0 y superior, puede encontrar esto haciendo 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']

Sin embargo, esto no funciona en Python 2.6 (o 2.5); el dircomando no es perfecto, por lo que siempre vale la pena consultar los documentos.

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

Si:

print p.pattern

sugerencia, use la dirfunción en python para obtener una lista de miembros:

dir(p)

esta lista:

['__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
fuente
3
help( value )es mucho más útil en la consola.
Jochen Ritzel