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 语句检查其中的内容,并且据说向正则表达式字符串添加更多模式。
在正则表达式的两端添加锚点,加上一个量词(+如果要排除空字符串;*如果要允许空字符串)。现在,您只是检查第一个字符(单数)是否是字母(即匹配[a-zA-Z])。
你想要的是:
re.match("^[a-zA-Z]+$", textToRestrict)
Run Code Online (Sandbox Code Playgroud)
(或者,如果您的过滤器真的如此简单,请考虑使用字符串方法str.isalpha,如 SirParselot 在评论中建议的那样。)
| 归档时间: |
|
| 查看次数: |
3161 次 |
| 最近记录: |