<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def fuzzy_search_by_title(self, title, ignore_groups=None):
 """Find an entry by by fuzzy match. This will check things such as: * case insensitive matching * typo checks * prefix matches If the ``ignore_groups`` argument is provided, then any matching entries in the ``ignore_groups`` list will not be returned. This argument can be used to filter out groups you are not interested in. Returns a list of matches (an empty list is returned if no matches are found). """

        entries = []
        # Exact matches trump
        for entry in self.entries:
            if entry.title == title:
                entries.append(entry)
        if entries:
            return self._filter_entries(entries, ignore_groups)
        # Case insensitive matches next.
        title_lower = title.lower()
        for entry in self.entries:
            if entry.title.lower() == title.lower():
                entries.append(entry)
        if entries:
            return self._filter_entries(entries, ignore_groups)
        # Subsequence/prefix matches next.
        for entry in self.entries:
            if self._is_subsequence(title_lower, entry.title.lower()):
                entries.append(entry)
        if entries:
            return self._filter_entries(entries, ignore_groups)
        # Finally close matches that might have mispellings.
        entry_map = {entry.title.lower(): entry for entry in self.entries}
        matches = difflib.get_close_matches(
            title.lower(), entry_map.keys(), cutoff=0.7)
        if matches:
            return self._filter_entries(
                [entry_map[name] for name in matches], ignore_groups)
        return []