搜索查询的正则表达式

时间:2010-01-05 18:49:26

标签: regex django

我有Django设计的页面,它有自己的搜索引擎。我需要帮助的是正则表达式的构造,它将仅过滤有效查询,这些查询仅由波兰字母(大写和小写)和符号*和?组成。 ,任何人都可以提供帮助吗?

编辑: 我尝试过类似的东西:

query_re = re.compile(r'^\w*[\*\?]*$', re.UNICODE)
if not query_re.match(self.cleaned_data['query']):
    raise forms.ValidationError(_('Illegal character'))

但它也允许来自不同字母表的一些无效字符,并且不允许* somest?ing *查询。

2 个答案:

答案 0 :(得分:2)

如果您的语言环境设置正确,则可以使用

query_re = re.compile(r'^[\w\*\?]*$', re.LOCALE|re.IGNORECASE)

\w匹配所有特定于语言区域的字母数字:http://docs.python.org/library/re.html

答案 1 :(得分:1)

尝试类似

的内容
regex = r'(?iL)^[\s\*\?a-z]*$'

假设您的机器的区域设置是波兰语。第一部分(?iL)设置locale and ignorecase flags。 ^匹配字符串的开头,\ s匹配任何空格,a-z任何小写字母(或大写,由于ignorecase标志)。

或者,您可以只显式列出允许的字母(例如abcdefghijklmnopqrstuvwxyz),而不是使用(?L)和a-z。