bagaimana saya bisa mendapatkan string pola dari pola regexp yang dikompilasi dengan python

87

Saya punya beberapa kode seperti ini:

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

Apakah mungkin mendapatkan string "my pattern"dari pvariabel?

Mykola Kharechko
sumber

Jawaban:

108
p.pattern

Baca lebih lanjut tentang modul ulang di sini: http://docs.python.org/library/re.html

Mikhail Churbanov
sumber
7
Terima kasih. Saya tidak membaca dokumen karena saya mencoba i dir (p) dan hanya menampilkan beberapa atribut dan metode. stackoverflow.com/questions/1415924/…
Mykola Kharechko
Saya melakukan hal yang sama, dengan asumsi tidak ada cara sederhana untuk mendapatkannya :)
Anentropic
1
Sepertinya di python3 dir (some_compiled_pattern) menampilkan atribut, tetapi tidak di 2.7
David Lam
10
> Mengapa tidak membaca dokumen sebelum memposting pertanyaan seperti itu? Karena ketika Anda Google StackOverflow kembali lebih dulu. Pertanyaan yang sangat valid.
Aaron
21

Dari bagian "Objek Ekspresi Reguler" di redokumentasi modul:

RegexObject.pattern

String pola tempat objek RE dikompilasi.

Sebagai contoh:

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

Dengan remodul di Python 3.0 dan yang lebih baru, Anda dapat menemukannya dengan melakukan hal sederhana 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']

Namun ini tidak berfungsi pada Python 2.6 (atau 2.5) - dirperintahnya tidak sempurna, jadi sebaiknya periksa dokumennya!

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

Iya:

print p.pattern

petunjuk, gunakan dirfungsi dalam python untuk mendapatkan daftar anggota:

dir(p)

daftar ini:

['__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
sumber
3
help( value )jauh lebih berguna di konsol.
Jochen Ritzel