我的一个Django应用程序,我需要使用标志进行字符串验证。我的意思是说: 在管理面板中,我添加了例如:
baduser*@gmail.com
spambot-?@gmail.com
等...
不会有严格的pythonic正则表达式,但是'*'或'?'由普通管理员提供
当有人注册时,我必须通过Python正则表达式检查所有凭据。 我需要检查一下:
*
作为任何标志,一次或多次?
为1个标志。任何想法我怎么能做到?
答案 0 :(得分:5)
您将其翻译为正则表达式,然后使用它来匹配电子邮件地址。
这并不难:
import re
def translate_pattern(pattern):
res = []
for c in pattern:
if c == '*':
res.append('.+') # 1 or more
elif c == '.':
res.append('.') # exactly 1
else:
res.append(re.escape(c)) # anything else is a literal character
return re.compile(''.join(res))
该函数返回预编译的正则表达式:
>>> translate_pattern('baduser*@gmail.com').search('baduser12345@gmail.com')
<_sre.SRE_Match object at 0x107467780>
>>> translate_pattern('baduser*@gmail.com').search('gooduser@gmail.com')
请注意,因为您在.
上匹配任何字符,以下内容也匹配:
>>> translate_pattern('baduser*@gmail.com').search('baduser12345@gmail-com')
<_sre.SRE_Match object at 0x1074677e8>
因为.
与-
中的gmail-com
匹配。