элегантный способ сопоставления двух строк с подстановочными знаками

Я распечатываю текст из двух разных источников. Каждый из них может делать ошибки в разных местах, где они не узнают букву / группу букв. Если они чего-то не узнают, это заменяется знаком?. Например, если слово Roflcopter , один источник может вернуть Ro? Copter , а другой - Roflcopter . Мне нужна функция, которая возвращает, могут ли два совпадения быть эквивалентными, с учетом нескольких ? s. Пример:

match("Ro?copter", "Roflcop?er") --> True
match("Ro?copter", "Roflcopter") --> True
match("Roflcopter", "Roflcop?er") --> True
match("Ro?co?er", "Roflcop?er") --> True

Пока что я могу сопоставить одно OCR с идеальным, используя регулярные выражения:

>>> def match(tn1, tn2):
    tn1re = tn1.replace("?", ".{0,4}")
    tn2re = tn2.replace("?", ".{0,4}")

    return bool(re.match(tn1re, tn2) or re.match(tn2re, tn1))

>>> match("Roflcopter", "Roflcop?er")
True
>>> match("R??lcopter", "Roflcopter")
True

Но это не работает, когда у них обоих есть? В разных местах:

>>> match("R??lcopter", "Roflcop?er")
False
7
задан Claudiu 14 October 2010 в 20:48
поделиться