У меня есть модель Django, и в одном из полей мне нужно сохранить строку регулярного выражения, которую я буду использовать позже:
class Foo(models.Model):
name = models.CharField(max_length=30, unique=True)
regex_string = models.TextField()
Так, например, поле regex_string может быть установлено на:
r'\d{2}'
Затем я пытаюсь получить это позже, скомпилировать как выражение регулярного выражения и использовать его - однако, это не похоже на работу по плану:
>>> pattern = re.compile(ham.regex_string)
>>> print(pattern.match("22"))
None
Очевидно, если я передамнепосредственный литерал строки, он работает нормально:
>>> pattern = re.compile(r'\d{2}')
>>> pattern.match("22")
<_sre.SRE_Match object at 0x1505100>
Если я на самом деле печатаю ham.regex_string, он возвращает:
u"r'\\d{2}'"
Так что это строка в юникоде, но по какой-то причинеобратные слеши удвоены?Есть ли лучший способ сохранить шаблон регулярного выражения в модели Django, чтобы я мог использовать его позже?
Приветствия, Виктор
РЕДАКТИРОВАТЬ: Спасибо всем за ответы =).Я присудил ответ rczajka, так как он был первой частью поста (по крайней мере, если верить временным меткам StackOverflow).
Просто, чтобы прояснить ситуацию, поле было введено пользователями в форме(Джанго-администратор).Ранее они вводили регулярные выражения с r''
- например, r'\d{2}\
.Однако, если я просто заставлю их ввести в строковый литерал сам \d{2}
, теперь это, похоже, сработает - Django не изменяет строку и не интерпретирует обратную косую черту - нет никаких причин для этого, верно?