python 模糊匹配

发布时间:2019-09-16 07:27:25编辑:auto阅读(1554)

    import re
    
    def fuzzyfinder(input, collection, accessor=lambda x: x):
        """
        Args:
            input (str): A partial string which is typically entered by a user.
            collection (iterable): A collection of strings which will be filtered
                                   based on the `input`.
        Returns:
            suggestions (generator): A generator object that produces a list of
                suggestions narrowed down from `collection` using the `input`.
        """
        suggestions = []
        input = str(input) if not isinstance(input, str) else input
        pat = '.*?'.join(map(re.escape, input))
        regex = re.compile(pat)
        for item in collection:
            r = regex.search(accessor(item))
            if r:
                suggestions.append((len(r.group()), r.start(), accessor(item), item))
    
        return (z[-1] for z in sorted(suggestions))

关键字