как я могу получить строку шаблона из скомпилированного шаблона регулярного выражения в 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']
dbr
источник
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 )гораздо полезнее на консоли.
Йохен Ритцель,