Вероятно, вы будете выполнять эту замену только изредка, например, каждый раз, когда пользователь вводит новую строку поиска, поэтому я не буду беспокоиться о том, насколько эффективно решение.
Вам необходимо сгенерировать список замен, которые необходимо преобразовать из "пользовательского формата" в регулярное выражение. Для простоты обслуживания я бы сохранил их в словаре, и, как @Konrad Rudolph, я бы просто использовал метод замены:
def wildcard_to_regex(wildcard):
replacements = {
'*': '.*',
'?': '.?',
'+': '.+',
}
regex = wildcard
for (wildcard_pattern, regex_pattern) in replacements.items():
regex = regex.replace(wildcard_pattern, regex_pattern)
return regex
Обратите внимание, что это работает только для простых замен символов, хотя другой сложный код может быть, по крайней мере, скрыт в функции wildcard_to_regex
при необходимости.
(Кроме того, я не уверен, что ?
должно переводиться на .?
- я думаю, что нормальные символы подстановки имеют ?
как "ровно один символ", поэтому его замена должна быть простой .
- но я следую вашему примеру.)