como posso obter string de padrão de padrão regexp compilado em python

87

Eu tenho um código como este:

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

É possível obter string "my pattern"de pvariável?

Mykola Kharechko
fonte

Respostas:

108
p.pattern

Leia mais sobre o módulo re aqui: http://docs.python.org/library/re.html

Mikhail Churbanov
fonte
7
Obrigado. Eu não leio documentos porque tento i dir (p) e ele exibe apenas vários atributos e métodos. stackoverflow.com/questions/1415924/…
Mykola Kharechko
Eu fiz o mesmo, assumindo que não havia uma maneira simples de obtê-lo :)
Anentrópico
1
parece que em python3 dir (some_compiled_pattern) exibe os atributos, mas não em 2.7
David Lam
10
> Por que não ler os documentos antes de postar essas perguntas? Porque quando você google StackOverflow retorna primeiro. Pergunta perfeitamente válida.
Aaron
21

Na seção "Objetos de expressão regular" da redocumentação do módulo:

RegexObject.pattern

A string padrão a partir da qual o objeto RE foi compilado.

Por exemplo:

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

Com o remódulo em Python 3.0 e superior, você pode descobrir isso fazendo um simples 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']

Isso, entretanto, não funciona no Python 2.6 (ou 2.5) - o dircomando não é perfeito, então sempre vale a pena verificar a documentação!

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

Sim:

print p.pattern

dica, use a dirfunção em python para obter uma lista de membros:

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
fonte
3
help( value )é muito mais útil no console.
Jochen Ritzel,