[英]Check string by user-given regex
我是我的Django应用程序之一,我需要使用标志进行字符串验证。 我的意思是:在管理面板中,例如添加:
baduser*@gmail.com
spambot-?@gmail.com
等等...
不会有严格的pythonic正则表达式,但是'*'或'?' 由普通管理员提供
有人注册时,我必须通过Python regex检查所有这些凭据。 我需要检查:
*
作为任何符号,一次或多次 ?
作为1标志。 有什么主意我该怎么做吗?
您可以将其转换为正则表达式,然后使用它与电子邮件地址进行匹配。
这并不难做到:
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
中的-
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.