带有特殊字符的正则表达式

时间:2010-05-16 09:46:40

标签: django django-forms

我需要一个正则表达式来验证字符串中的一个或多个字符:

  • a-z
  • A-Z
  • '
  • àòèéùì
  • 简单的空白区域

例如,这些字符串是valide:

D' argon calabrò

maryòn l' Ancol

这些字符串不是valide:

hello38239

my_house 

work [tab] with me

我试过这个:

re.match(r“^ [a-zA-Z'òàèéìù] + $”,string)

它似乎在我的python shell中工作,但在Django中我收到此错误:

SyntaxError at /home/

("Non-ASCII character '\\xc3' ...

为什么?


编辑:

我在forms.py的顶部添加了# - - coding:utf-8 - - 但是带有à,è,ò,ù,é或ì的字符串不匹配从未

这是我的forms.py清理方法:

    def clean_title(self):

        if(re.match(r"^[a-zA-Z 'òàèéìù]+$", self.cleaned_data['title'].strip())):
            return self.cleaned_data['title'].strip()               
        raise forms.ValidationError(_("This title is not valid."))

2 个答案:

答案 0 :(得分:2)

如果您在python源文件中使用非ASCII字符,则应在源文件的顶部添加适当的编码,如下所示:

# -*- coding: utf-8 -*-
utf_string='čćžđšp'

Defining Python Source Code Encodings

这似乎对我很好:

>>> import re
>>> mystring = "D' argon calabrò"
>>> matched = re.match(r"^([a-zA-Z 'òàèéìù]+)$", mystring)
>>> print matched.groups()
("D' argon calabr\xc3\xb2",)

答案 1 :(得分:1)

那些,几乎都是非ascii字符。所以我认为它只使用ascii进行字符编码。也许您需要将其配置为使用UTF-8?