Python 按用户给定的正则表达式检查字符串

Python 按用户给定的正则表达式检查字符串,python,regex,django,Python,Regex,Django,在我的Django应用程序中,我需要使用标志进行字符串验证。我的意思是: 在管理面板中,我添加了例如: baduser*@gmail.com spambot-?@gmail.com 等等 不会有严格的pythonic正则表达式,而是由公共管理提供的“*”或“?” 当有人注册时,我必须通过Python正则表达式检查所有凭据。 我需要检查: *作为任何符号,一次或多次 ?作为一个符号 你知道我该怎么做吗?你可以把它翻译成正则表达式,然后用它来匹配电子邮件地址 这并不难做到: import r

在我的Django应用程序中,我需要使用标志进行字符串验证。我的意思是: 在管理面板中,我添加了例如:

  • baduser*@gmail.com
  • spambot-?@gmail.com
等等

不会有严格的pythonic正则表达式,而是由公共管理提供的“*”或“?”

当有人注册时,我必须通过Python正则表达式检查所有凭据。 我需要检查:

  • *
    作为任何符号,一次或多次
  • 作为一个符号

你知道我该怎么做吗?

你可以把它翻译成正则表达式,然后用它来匹配电子邮件地址

这并不难做到:

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')

因为
gmail com

中的
-
匹配,所以您需要将其转换为正则表达式,然后使用该表达式与电子邮件地址匹配

这并不难做到:

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')

因为
gmail com

中的
-
匹配是
baduser@gmailxcom
有效地址或标志是否仅对用户名有效?baduser*@gmail.com是管理员提供的字符串。该表达式应阻止,例如:baduserlorem@gmail.com, baduserlalala@gmail.com等等。我必须设法避开像“.”和“+”这样的有效电子邮件符号,我认为它们是正则表达式中的特殊字符。is
baduser@gmailxcom
有效地址或标志是否仅对用户名有效?baduser*@gmail.com是管理员提供的字符串。该表达式应阻止,例如:baduserlorem@gmail.com, baduserlalala@gmail.com等等。我必须,不知何故,避开像“.”和“+”这样的有效电子邮件符号,我认为它们是正则表达式中的特殊字符。