import re
from typing import List


def expand_pairlist(wildcardpl: List[str], available_pairs: List[str]) -> List[str]:
    """
    Expand pairlist potentially containing wildcards based on available markets.
    This will implicitly filter all pairs in the wildcard-list which are not in available_pairs.
    :param wildcardpl: List of Pairlists, which may contain regex
    :param available_pairs: List of all available pairs (`exchange.get_markets().keys()`)
    :return expanded pairlist, with Regexes from wildcardpl applied to match all available pairs.
    :raises: ValueError if a wildcard is invalid (like '*/BTC' - which should be `.*/BTC`)
    """
    result = []
    for pair_wc in wildcardpl:
        try:
            comp = re.compile(pair_wc)
            result += [
                pair for pair in available_pairs if re.match(comp, pair)
            ]
        except re.error as err:
            raise ValueError(f"Wildcard error in {pair_wc}, {err}")
    return result