我试图在python中创建一个小的文本限制程序。基本上,用户输入文本,一些过滤器(a表示字母,n表示数字等)。用户可以组合过滤器(a和n用于字母数字等),但我偶然发现了这个:
if re.match("[a-zA-Z]", textToRestrict):
return True
else:
return False
这里的事情崩溃了。据说,只使用字母作为过滤器,程序只接受字符串,例如dance
。但是,如果true
是textToRestric
(不正确),而dance1234
将返回1234dance
(正确),则if语句仍会返回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
arguments
是用户输入的参数。 if语句检查那里的内容,并且据推测,在正则表达式字符串中添加更多模式。
答案 0 :(得分:4)
在正则表达式的两端添加anchors,如果要排除空字符串,请加上量词(+
;如果要允许空字符串,请添加*
。现在,你只是检查第一个字符(单数)是否是字母(即匹配[a-zA-Z]
)。
你想要的是:
re.match("^[a-zA-Z]+$", textToRestrict)
(或者,如果您的过滤器真的很简单,请考虑使用str.isalpha
之类的字符串方法,而不是as SirParselot suggests in a comment。)