Я не уверен, что полностью понимаю требования. Если я предполагаю, что пользователи хотят найти текстовые «записи» там, где их поиск совпадает, то я думаю, что этот грубый способ будет работать как начало.
Сначала избегайте всего, что имеет значение для регулярных выражений. Затем используйте замены без регулярных выражений для замены (теперь экранированных) глобальных символов и построения регулярного выражения. Как и в Python:
regexp = re.escape(search_string).replace(r'\?', '.').replace(r'\*', '.*?')
Для строки поиска в вопросе это строит регулярное выражение, которое выглядит так (необработано):
foo\..\ bar.*?
Используется в фрагменте Python:
search = "foo.? bar*"
text1 = 'foo bar'
text2 = 'gazonk foo.c bar.m m.bar'
searcher = re.compile(re.escape(s).replace(r'\?', '.').replace(r'\*', '.*?'))
for text in (text1, text2):
if searcher.search(text):
print 'Match: "%s"' % text
Производит:
Match: "gazonk foo.c bar.m m.bar"
Обратите внимание, что если вы изучите объект совпадения, вы сможете узнать больше о совпадении и использовать его для выделения или чего-либо еще.
Конечно, может быть что-то еще, но это должно быть начало.