An example of how to make your function more flexible to handle a different number of return values. This means you won’t have to write the same code repeatedly if you are only changing the number of groups that are being returned.
def findMatches(string, regex) -> dict: """ This is a generic matching function. Warning! Your regex expression MUST use 'Named Groups' -> (:P<name>) or this function will return an empty dictionary :param string: The text you are searching :type string: str :param regex: The regular expression string you are using to search :type regex: str :returns: A dictionary of named key/value pairs. The key value is derived \ from (:P<name>) :returns: None is returned if No match is found. :rtype: dict :rtype: None """ matcher = re.compile(regex, re.UNICODE) match = matcher.match(string) if match: matches = dict() for key in match.groupdict(): matches[key] = match.group(key) return matches # No Matches return None