как я могу получить строку шаблона из скомпилированного шаблона регулярного выражения в python


87

У меня есть такой код:

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

Можно ли получить строку "my pattern"из pпеременной?

Ответы:


108
p.pattern

Подробнее о модуле re здесь: http://docs.python.org/library/re.html


7
Спасибо. Я не читаю документацию, потому что я пробую i dir (p), и он отображает только несколько атрибутов и методов. stackoverflow.com/questions/1415924/…
Николай Харечко

Я сделал то же самое, предположив, что нет простого способа получить это :)
Anentropic

1
похоже, что в python3 dir (some_compiled_pattern) отображаются атрибуты, но не в 2.7
Дэвид Лам

10
> Почему бы не прочитать документы перед тем, как задавать такие вопросы? Потому что, когда вы используете Google, сначала возвращается StackOverflow. Совершенно актуальный вопрос.
Аарон

21

Из раздела «Объекты регулярных выражений»re документации модуля:

RegexObject.pattern

Строка шаблона, из которой был скомпилирован объект RE.

Например:

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

С reмодулем в Python 3.0 и выше вы можете найти это, выполнив простую операцию 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']

Однако это не работает на Python 2.6 (или 2.5) - dirкоманда не идеальна, поэтому всегда стоит проверять документацию!

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

9

Да:

print p.pattern

Подсказка, используйте dirфункцию в python, чтобы получить список членов:

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

3
help( value )гораздо полезнее на консоли.
Йохен Ритцель,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.