Как передать регулярное выражение методу, для которого требуется строка?

То, чего я хочу добиться, основано на проголосовавшем ответе на предыдущий вопрос: Проверьте, существует ли узел в h5py

В основном я хочу заменить:

"/some/path" in h5File

с чем-то вроде:

import re
re.compile(r'/some/[pattern]+') in h5File

person Hailiang Zhang    schedule 12.11.2015    source источник
comment
Вы не можете, это не имеет смысла. Если только метод __contains__, реализующий in, не написан для приема скомпилированного регулярного выражения, или если вы не можете получить фактическую строку для сопоставления, сделать это невозможно.   -  person jonrsharpe    schedule 12.11.2015


Ответы (1)


Ключевое слово in не может принимать регулярное выражение, но вы можете использовать встроенное понимание списка или filter, чтобы получить все ключи из словаря, соответствующие заданному регулярному выражению.

E.g.

found_keys = [k for k in h5file if re.match(r'/some/[pattern]+', k)]

or

regex = re.compile(r'/some/[pattern]+')
found_keys = filter(regex.match, h5file)
person memoselyk    schedule 12.11.2015
comment
Кроме того, если Hailiang хочет только проверить, существует ли соответствующий ключ, можно просто вызвать any(regex.match(k) for k in h5file). - person brandizzi; 12.11.2015