import re


def get_matching_columns(dataframe, *args, **kwargs):
    """
    Filter column whose names match the regular expressions defined in
    ``args``.

    Args:
        dataframe (pandas.DataFrame): Input DataFrame
        \*args (List[str]): List of regular expressions matching column names
    Keyword Args:
        excluded (List[str]): Exclusion list (case insensitive)
    """
    if dataframe.empty:
        return []
    excluded = kwargs.get('excluded', None) or []
    if not isinstance(excluded, list):
        excluded = [excluded]
    regex = re.compile('^.*({0}).*$'.format('|'.join(args)),
                       re.IGNORECASE)
    return [match.group(0) for column in dataframe.columns
            for match in [re.search(regex, column)]
            if match and not any(exclusion.upper() in column.upper()
                                 for exclusion in excluded)
            ]