【发布时间】:2011-10-13 23:00:50
【问题描述】:
我有 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}'"
所以它是一个 unicode 字符串,但由于某种原因,反斜杠加倍了?有没有更好的方法在 Django 模型中存储正则表达式模式,以便我以后可以使用它?
干杯, 维克多
编辑:感谢大家的回答 =)。我已将答案授予 rczajka,因为他是帖子的第一部分(至少如果要相信 StackOverflow 时间戳的话)。
只是为了澄清问题,该字段是由用户在表单 (django-admin) 上输入的。以前,他们在 with r'' 中输入正则表达式 - 例如r'\d{2}\。但是,如果我只是让他们输入字符串文字本身 \d{2},它现在似乎可以工作 - Django 不会篡改字符串或解释反斜杠 - 没有理由应该这样做,对吧?
【问题讨论】:
标签: regex django django-models