Checks a string for a possible discipline string token, this assumes its on its own
            and is not part of or camel cased and combined with a word.  Returns first found match to reduce duplicates.
            We can be safe to assume the abbreviation for the discipline does not have camel casing within its own word.

        :param name: str, the string based object name
        :param ignore: str, specific ignore string for the search to avoid
        :param min_length: int, minimum length for possible abbreviations of disciplines. Lower = more wrong guesses.
        :return: dict, match dictionary

def get_discipline(cls, name, ignore='', min_length=3):
        """ Checks a string for a possible discipline string token, this assumes its on its own
            and is not part of or camel cased and combined with a word.  Returns first found match to reduce duplicates.
            We can be safe to assume the abbreviation for the discipline does not have camel casing within its own word.

        :param name: str, the string based object name
        :param ignore: str, specific ignore string for the search to avoid
        :param min_length: int, minimum length for possible abbreviations of disciplines. Lower = more wrong guesses.
        :return: dict, match dictionary
        """
        for discipline in cls.CONFIG_DISCIPLINES:
            re_abbr = '({RECURSE}(?=[0-9]|[A-Z]|{SEPARATORS}))'.format(
                RECURSE=cls._build_abbreviation_regex(discipline),
                SEPARATORS=cls.REGEX_SEPARATORS)
            matches = cls._get_regex_search(name, re_abbr, ignore=ignore)
            if matches:
                matches = [m for m in matches if
                           re.findall('([a-z]{%d,})' % min_length, m['match'], flags=re.IGNORECASE)]
                if matches:
                    return matches[-1]
        return None