首页 / 知识
关于python:如何验证字符串仅包含字母,数字,下划线和破折号?
2023-04-16 23:46:00

How do I verify that a string only contains letters, numbers, underscores and dashes?如果我遍历字符串中的所有字符,我知道该怎么做,但是我正在寻找一种更优雅的方法。 正则表达式只需很少的代码即可完成操作:
[编辑]还有一个尚未提及的解决方案,在大多数情况下,它似乎胜过迄今为止给出的其他解决方案。 使用string.translate替换字符串中的所有有效字符,然后查看是否还有剩余的无效字符。这非常快,因为它使用基础C函数来完成工作,并且只涉及很少的python字节码。 显然性能不是全部-在性能不关键的代码路径中,采用可读性最高的解决方案可能是最好的方法,而只是为了查看解决方案的堆叠方式,这里是所有方法的性能比较到目前为止提出。 check_trans是使用string.translate方法的那个。 测试代码:
我的系统上的结果是:
在大多数情况下,转换方法似乎是最好的,对于有效的长字符串来说尤其如此,但是在test_long_invalid中,它被正则表达式所击败(大概是因为正则表达式可以立即退出,但翻译始终必须扫描整个字符串)。设置方法通常是最糟糕的,仅在空字符串情况下才击败正则表达式。 使用all(如果在早期使用x,则在allow_set中使用x在allowed_set中)表现良好,但是如果必须遍历每个字符,则可能会很糟糕。 isSubSet和set差异是可比较的,并且与字符串的长度成正比,而与数据无关。 匹配所有有效字符和搜索无效字符的regex方法之间存在相似的区别。在检查一个长而完全有效的字符串时,匹配的性能要好一些,但在字符串末尾附近的无效字符时,匹配性能会更差。 有多种方法可以实现此目标,有些方法比其他方法更清晰。对于我的每个示例,\\'True \\'表示传递的字符串是有效的,\\'False \\'表示它包含无效的字符。 首先,有一种幼稚的方法:
然后使用正则表达式,您可以使用re.match()进行此操作。请注意,\\'-\\'必须位于[]的末尾,否则它将用作\\'range \\'分隔符。还要注意$,它表示\\'字符串的结尾\\'。这个问题中提到的其他答案使用特殊的字符类\\'\\\\\\\\ w \\',我总是更喜欢使用[]作为显式的字符类范围,因为它更容易理解,而无需查找快速参考指南,而且更容易出现特殊情况。
另一种解决方案指出,您可以对正则表达式进行逆向匹配,我现在将其包括在此处。请注意,[^ ...]会反转字符类,因为使用了^:
您也可以使用\\'set \\'对象做一些棘手的事情。看一下这个示例,该示例从原始字符串中删除了所有允许的字符,从而为我们提供了一个包含以下内容的集合:a)无,或b)字符串中令人反感的字符:
如果不使用破折号和下划线,则最简单的解决方法是
(Python库参考的3.6.1节) 作为使用正则表达式的替代方法,您可以在Sets中进行:
正则表达式可以非常灵活。
因此您需要添加 您需要使用这两个特殊字符,因为您需要避免以下情况。像 好吧,您可以向regex寻求帮助,这里很棒:) 代码:
输出:
希望这会有所帮助:) 这是基于Jerub "天真的方法"(天真是他的话,不是我的话!)的内容:
如果 但是测试集中是否存在应该更有效,或者至少更少地依赖于允许的字符数。当然,这种方法在我的机器上要快一些。很明显,我认为在大多数情况下它的性能都足够好(在我的慢速机器上,我可以在不到一秒钟的时间内验证成千上万个短字符串)。我喜欢。 实际上,在我的计算机上,正则表达式的运行速度快了好几倍,并且就这么简单(可以说更简单)。因此,这可能是最好的方法。 您始终可以使用列表推导并全部检查结果,这比使用正则表达式要少一些资源: 使用正则表达式,看看是否匹配!
|
最新内容
相关内容
linux输出字符串命令?
linux输出字符串命令?,标准,基础,字符串,资料,简介,商业,数字,系统,命令,汉字,Linux中c语言中汉字字符串的输出引入标准输入输出库:sdtio.h。定linux命令替换的字符?
linux命令替换的字符?,命令,数据,系统,商业,字符串,文件,内容,方法,批量,字符,Linux批量替换多个文件中字符串Linux下批量替换多个文件中的字linux命令删除字符串?
linux命令删除字符串?,软件,系统,代码,名称,通用,连续,字符,字符串,命令,空格,类似trim命令,去除字符串中的冒号,有这个简单的命令吗?1、=trimlinux命令行字符隐藏?
linux命令行字符隐藏?,系统,标准,信息,名称,代码,工具,文件夹,命令,文件,语言,linux下c语言隐藏命令窗口1、如果只是要隐藏标准输出,可以通过设linux转换字符集命令?
linux转换字符集命令?,系统,名称,时间,位置,服务,文件,字符集,命令,格式,以下,如何在Linux系统实现字符编码转换首先我们打开系统并使用root账linux字符动画命令?
linux字符动画命令?,工作,系统,地址,信息,命令,目录,工具,时间,标准,基础,Linux常用基本命令大全介绍linux常用命令: pwd命令 该命令的英文解释linux命令匹配数字?
linux命令匹配数字?,数字,档案,位置,环境,名字,较大,系统,权限,命令,用户,Linux的基本命令格式如何?Linux下经常使用的通配符有哪些通配符 基linux权限数字命令?
linux权限数字命令?,数字,系统,地址,权限,命令,标准,情况,管理,基础,文件,linux734是什么权限1、linux权限从左至右,第一位数字代表文件所有者字符串查找命令linux?
字符串查找命令linux?,系统,字符串,工具,信息,文件,命令,字符,选项,文本,范本,如何在Linux下查找文件内容包含某个特定字符串的文件在linux中glinux命令替换字符串?
linux命令替换字符串?,字符串,文件,批量,首次,数据,命令,内容,方法,用字,结尾,linux下批量查询文件内容字符串并替换一)通过vi编辑器来替换。vilinux命令中转义字符?
linux命令中转义字符?,标准,本行,密码,字符,电脑,系统,环境,数据,命令,终端,linux有哪些需要转义的字符(1)转义字符“”如果将“”放到特殊字符linux命令行字符颜色?
linux命令行字符颜色?,系统,地址,代码,信息,数字,软件,通用,电脑,颜色,命令,linux怎么命令显示多种颜色?1、) cp /etc/DIR_COLORS $HOME/.dir_