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.

Другие вопросы по тегам