Возможно, вы будете иногда делать эту замену, например, каждый раз, когда пользователь вводит новую строку поиска, поэтому я не буду беспокоиться о том, насколько эффективно это решение.
Вам необходимо сгенерировать список замен, необходимых для преобразования из «пользовательского формата» в регулярное выражение. Для простоты обслуживания я бы хранить их в словаре, и как @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
, если необходимо.
(Кроме того, я не уверен, что ?
должен перевести .?
- Я думаю, что нормальные маски имеют ?
как «один символ», поэтому его замена должна быть простой .
- но я следую вашему примеру .)
Вы говорите о раскопках? Если да, то я думаю, что "?" должен быть преобразован в "." (т. е. один символ) – tzot 2008-10-20 12:13:34