jak mogę uzyskać ciąg wzorca ze skompilowanego wzorca regexp w Pythonie

87

Mam kod taki jak ten:

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

Czy można pobrać string "my pattern"ze pzmiennej?

Mykoła Chareczko
źródło

Odpowiedzi:

108
p.pattern

Przeczytaj więcej o module re: http://docs.python.org/library/re.html

Michaił Churbanow
źródło
7
Dzięki. Nie czytam dokumentów, ponieważ próbuję dir (p) i wyświetla tylko kilka atrybutów i metod. stackoverflow.com/questions/1415924/…
Mykola Kharechko
Zrobiłem to samo, zakładając, że nie ma prostego sposobu na to :)
Anentropic
1
wygląda na to, że w dir python3 (some_compiled_pattern) wyświetla atrybuty, ale nie w wersji 2.7
David Lam
10
> Dlaczego nie przeczytać dokumentów przed wysłaniem takich pytań? Ponieważ kiedy google, StackOverflow wraca jako pierwszy. Idealnie poprawne pytanie.
Aaron
21

Z sekcji „Regular Expression Objects” w redokumentacji modułu:

RegexObject.pattern

Ciąg wzorca, z którego skompilowano obiekt RE.

Na przykład:

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

W przypadku remodułu w Pythonie 3.0 i nowszych można to znaleźć, wykonując proste 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']

To jednak nie działa w Pythonie 2.6 (lub 2.5) - dirpolecenie nie jest idealne, więc zawsze warto sprawdzić dokumentację!

>>> print dir(p)
['__copy__', '__deepcopy__', 'findall', 'finditer', 'match', 'scanner',
'search', 'split', 'sub', 'subn']
dbr
źródło
9

Tak:

print p.pattern

wskazówka, użyj dirfunkcji w Pythonie, aby uzyskać listę członków:

dir(p)

ta 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
źródło
3
help( value )jest znacznie bardziej przydatny na konsoli.
Jochen Ritzel