我试图在python中创建一个小的文本限制程序。基本上,用户输入文本,一些过滤器(a表示字母,n表示数字,等等)。用户可以组合过滤器(a和n表示alpha-数值,等等)但我无意中发现:
if re.match("[a-zA-Z]", textToRestrict):
return True
else:
return False事情就在这里分崩离析。据说,只有字母作为过滤器,程序将只接受字符串,例如,dance。但是,如果true是dance1234 (不正确),而1234dance将返回false (正确),则if语句仍然返回false。
相反,如果我通过[0-9]测试数字,即使包含字母字符,它仍然会返回true,条件是这些字符不是第一个字符。
如何使用regex只匹配特定类型,并且在其中添加另一种类型(如字符串+类型数字)允许这两种类型返回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 Falsearguments是用户输入的参数。if语句检查其中的内容,并且应该向regex字符串中添加更多的模式。
发布于 2015-12-01 20:21:27
在正则表达式的两端添加锚,加上一个量词(如果要排除空字符串,则为+;如果要允许空字符串,则为* )。现在,您只是检查第一个字符(单数)是否为字母(即匹配[a-zA-Z])。
你想要的是:
re.match("^[a-zA-Z]+$", textToRestrict)(或者,如果过滤器真的这么简单,可以考虑使用字符串方法,比如str.isalpha,正如SirParselot在评论中所暗示的。)
https://stackoverflow.com/questions/34029365
复制相似问题