python:正则表达式匹配字符串且仅匹配字符串

标签 python regex string

<分区>

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

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

这就是事情分崩离析的地方。据推测,仅使用字母作为过滤器,该程序将只接受字符串,例如 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

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

最佳答案

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

你想要的是:

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

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

关于python:正则表达式匹配字符串且仅匹配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34029365/

相关文章:

java - 如何格式化带有前导零的Java字符串?

C 程序在轨道数组中搜索轨道

python - 如何让 Windows 知道我用 Python 编写的服务?

Javascript 不会使用正则表达式进行分割

java - 计算 N 变量多项式字符串

python - 使用分隔符 pandas python 将单元格连接成一个字符串

python - 获取列表中重复次数最多的名称,或者如果有平局,则按字母顺序排列第一个

python - 在我的模型中使用 Pytorch SSIM 损失函数

python - 在 Django 项目中的 URL 中托管使用​​ mkdocs 生成的 API 文档

c# - 为什么 Regex IsMatch() 挂起