¿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?

Respuestas:


108
p.pattern

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


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

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

3
help( value )es mucho más útil en la consola.
Jochen Ritzel
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.