python:正则表达式匹配字符串和唯一的字符串

zac*_*con 1 python regex string

我正在尝试在 python 中创建一个小的文本限制程序。基本上,用户输入文本、一些过滤器(a 表示字母,n 表示数字等)。用户可以组合过滤器(a 和 n 用于字母数字等),但我偶然发现了这一点:

if re.match("[a-zA-Z]", textToRestrict):
    return True
else:
    return False
Run Code Online (Sandbox Code Playgroud)

这就是事情分崩离析的地方。据说,只有字母作为过滤器,程序将只接受字符串,例如,例如dance。但是,if 语句仍会返回,true如果textToRestric之前(例如)dance1234(不正确)而1234dance将返回false(正确)。

相反,如果我通过 测试数字[0-9]true即使它包含字母字符,它仍然会返回,前提是这些字符不是第一个。

我如何使用正则表达式只匹配某种类型,并以这样的方式添加另一种类型(如类型字符串 + 类型数字)允许两种类型返回true

更新:这是我用于多个过滤器的方法:

regex = ""
if FilterClass.ALPHABETIC in arguments:
    regex += "[a-zA-Z]"
if FilterClass.CAPITAL_ALPHABETIC in arguments:
    regex += "[A-Z]"
if FilterClass.NUMERIC in arguments:
    regex += "\d"
if FilterClass.SPECIAL_CHARACTERS in arguments:
    regex += "[^0-9a-zA-Z]*"
if FilterClass.DASH_UNDERSCORES in arguments:
    regex += "[-_]*"            

regall = "^(" + regex + ")+$"

if re.match(regall, textToRestrict):
    return True
else:
    return False
Run Code Online (Sandbox Code Playgroud)

arguments是用户输入的参数。if 语句检查其中的内容,并且据说向正则表达式字符串添加更多模式。

sen*_*hin 5

在正则表达式的两端添加锚点,加上一个量词(+如果要排除空字符串;*如果要允许空字符串)。现在,您只是检查第一个字符(单数)是否是字母(即匹配[a-zA-Z])。

你想要的是:

re.match("^[a-zA-Z]+$", textToRestrict)
Run Code Online (Sandbox Code Playgroud)

(或者,如果您的过滤器真的如此简单,请考虑使用字符串方法str.isalpha如 SirParselot 在评论中建议的那样。)

  • @Felk 严格来说,你是对的 - 事实并非如此。无论如何,为了明确起见,我宁愿把它放在那里。 (3认同)