Returns a tuple of (name, suffix), or (name, None) if no suffix could be found.
        As the method name indicates, the name is returned without the suffix.

        Suffixes deemed to be degrees are discarded.

def extract_suffix(self, name):
        """
        Returns a tuple of (name, suffix), or (name, None) if no suffix could be found.
        As the method name indicates, the name is returned without the suffix.

        Suffixes deemed to be degrees are discarded.
        """
        # don't extract suffixes if we can't reasonably suspect we have enough parts to the name for there to be one
        if len(name.strip().split()) > 2:
            name, suffix = self.extract_matching_portion(r'\b(?P<suffix>{})(?=\b|\s|\Z|\W)'.format(SUFFIX_RE), name)
            suffix, degree = self.extract_matching_portion(DEGREE_RE, suffix or '')
            return name, suffix or None

        return name, None