匹配逗号正则表达式有效,但否定不起作用

时间:2014-04-22 14:12:29

标签: python regex regex-negation

我有这个模特课:

class ItemTag(models.Model):

  name_regex = re.compile(r'[^,]')
  name = models.CharField('Tag Name', max_length = 20, unique = True,
                          validators=[RegexValidator(regex=name_regex)] )
  class Meta:
    ordering = ['name']

我需要使用验证器来拒绝其中包含逗号的字符串。我期望re.compile(r' [^,]')做到这一点,但事实并非如此。

当我将其更改为re.compile(r' [,]')时,它需要逗号,这是我所期望的,但字符类的否定似乎不起作用正如预期的那样,我无法在文档中找到任何解释。

我使用这些应用程序:

Python 2.6.5 Django 1.4.5

3 个答案:

答案 0 :(得分:3)

[^,]表示“一个字符,除,以外的任何字符”。

所以你的正则表达式检查至少有一个非逗号字符。

您可以使用此功能来确保非逗号字符位于您的字符串中:

^[^,]+$

^$是分别匹配字符串开头和结尾的锚点。

答案 1 :(得分:0)

您应该使用以下正则表达式:

name_regex = re.compile(r'^[^,]*$')

检查整个字符串以确保所有字符都不是,

答案 2 :(得分:0)

使用否定前瞻(?!.*[,])

class ItemTag(models.Model):

  name_regex = re.compile("^(?!.*[,]).*$")
  name = models.CharField('Tag Name', max_length = 20, unique = True,
                          validators=[RegexValidator(regex=name_regex)] )
  class Meta:
    ordering = ['name']