python:正则表达式匹配字符串,只有字符串

时间:2015-12-01 20:19:00

标签: python regex string

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

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

这里的事情崩溃了。据说,只使用字母作为过滤器,程序只接受字符串,例如dance。但是,如果truetextToRestric(不正确),而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语句检查那里的内容,并且据推测,在正则表达式字符串中添加更多模式。

1 个答案:

答案 0 :(得分:4)

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

你想要的是:

re.match("^[a-zA-Z]+$", textToRestrict)

(或者,如果您的过滤器真的很简单,请考虑使用str.isalpha之类的字符串方法,而不是as SirParselot suggests in a comment。)