Pokemon search engine
There are much simpler ways to do this.    The easy way is to use difflib.get_close_matches() which is very similar to what you are creating.  If you insist on making your own, there are still simpler ways.



First of all, why regex?  You don't have patterns to match.  You have simple equality tests.  The only thing that makes it different from a in b is re. IGNORE_CASE.  Simply fixed, do a.lower() in b.lower().  In this case, however, you actually mean a.lower() == b.lower().



Iterating through two sequences in parallel is a common enough task that Python made it easy with zip().  Instead of

for i in range(len(a))):


with a[i] and b[i], you can use

for a_item, b_item in zip(a, b):


Conveniently, it stops at the end of the shortest iterable (not in Python 3).



Your method of limiting the number of matches returned is not ideal. Instead of deleting the ones you don't want, keep only the ones that you do. That is done simply with a slice.



In Python, the bool class (for True and False) inherits from the int class. Therefore, you can do arithmetic with booleans.  True is 1, and False is 0. With that knowledge and the earlier improvements, we get something much simpler:

def diff_score(iter_a, iter_b):
    return sum(a == b for a, b in zip(iter_a.lower(), iter_b.lower()))

def best_matches(guess, names, num_matches):
    matches = sorted(names, key=lambda x: diff_score(x, guess), reverse=True)
    return  matches[:num_matches]