Python составляет список элементов в соответствии со словарем пар ключ-значение, но значения должны быть шаблонами регулярных выражений
Я пытаюсь создать функцию-оболочку для существующего здесь itertags: https://github.com/streamlink/streamlink/blob/master/src/streamlink/plugin/api/utils.py
В настоящее время у меня есть это:
def itertags_wrapper(html, tag, attrs=None, ret=False):
try:
result = list(itertags(html, tag))
if isinstance(attrs, dict):
attrs = list(iteritems(attrs))
result = [i for i in result if any([a for a in attrs if a in list(iteritems(i.attributes))])]
if ret:
# noinspection PyTypeChecker
result = [i.attributes[ret] for i in result if ret in i.attributes]
except Exception:
result = []
return result
Теперь он возвращает теги, содержащие ту же пару "ключ-значение", что и в attrs, но КАК мне получить значение пары в шаблоне регулярного выражения и расширить возможные результаты?
PS iteritems сначала передается через модуль "compat", чтобы работать как на python 2, так и на 3.
1 ответ
После множества тестов я пришел к следующему решению:
def itertags_wrapper(html, tag, attrs=None, ret=False):
try:
result = list(itertags(html, tag))
if isinstance(attrs, dict):
attrs = list(iteritems(attrs))
result = [
i for i in result if any(
[a for a in attrs if any([a[0] == k and re.match(a[1], v) for k, v in iteritems(i.attributes)])]
)
]
if ret:
# noinspection PyTypeChecker
result = [i.attributes[ret] for i in result if ret in i.attributes]
except Exception:
result = []
return result
Все, что я сделал, это добавил вторую итерацию пар ключ-значение attrs.