Отредактировано для более краткого использования '?'vs '{0,1}'
Реальная проблема, конечно, в том, что тот, кто / что бы ни передавал вам поиск полей, не подготовил его должным образом, но regEx не обязательно будет намного медленнеечем зацикливание всей коллекции литеральной строкой.
Соответствие RegEx является последовательным, поэтому вам придется сделать что-то подобное для 'testuser' where '.'символы между буквами необязательны.Это на самом деле не так уж и медленно для regEx, так как он должен потерпеть неудачу, как только символ не будет совпадать, и все символы явные, поэтому вы не используете массивный индекс для каждого символа.
r'^t\.?e\.?s\.?t\.?u\.?s\.?e\.?r$'
Важна часть пространства между вашими обычными персонажами.Для> = 0 '.'символы, которые вы могли бы сделать. * и, конечно, я предполагаю, что нет периодов начала или конца.Если вы можете объединить, вы сможете справиться с этим.
Чтобы создать первый regEx, я бы сделал что-то вроде:
user = user.split('')
userRegEx = '\.?'.join(user)
#not sure I have the right syntax for the Django arg
User.objects.filter(username__regex=r'^'+userRegEx+'$')
Как парень из JS, я должен сказать, что я 'Я немного озадачен тем, почему сообществу Python не пришло в голову, что обе строки и списки могут иметь метод .join.