首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查字符串是否包含python中的某些字符

检查字符串是否包含python中的某些字符
EN

Stack Overflow用户
提问于 2011-12-07 23:05:53
回答 5查看 13.7K关注 0票数 4

我想检查字符串是否只包含A-Z、a-z和0-9以及下划线和破折号(_ -)

不应包含任何其他特殊符号,如!"#\%

如何编写正则表达式?

并使用match或?

我的字符串如下: QOIWU_W QWLJ2-1

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-12-07 23:12:01

是的,re.match看起来是一个很好的匹配(请原谅双关语)。对于正则表达式,如下所示如何:'[A-Za-z0-9-_]*'

票数 8
EN

Stack Overflow用户

发布于 2011-12-07 23:23:24

使用re不会有任何危害,但出于对科学的好奇心,另一种不需要通过re的方法是使用sets:

代码语言:javascript
复制
>>> valid = set('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_ ')
>>> def test(s):
...    return set(s).issubset(valid)
... 
>>> test('ThiS iS 4n example_sentence that should-pass')
True
>>> test('ThiS iS 4n example_sentence that should fail!!')
False

为了简明起见,测试函数也可以写成:

代码语言:javascript
复制
>>> def test(s):
...    return set(s) <= valid

EDIT:出于好奇心进行了一点计时(时间以秒为单位,对于每个测试实现,它运行三组迭代):

代码语言:javascript
复制
>>> T(lambda : re.match(r'^[a-zA-Z0-9-_]*$', s)).repeat()
[1.8856699466705322, 1.8666279315948486, 1.8670001029968262]
>>> T(lambda : set(y) <= valid).repeat()
[3.595816135406494, 3.568570852279663, 3.564558982849121]
>>> T(lambda : all([c in valid for c in y])).repeat()
[6.224508047103882, 6.2116711139678955, 6.209425926208496]
票数 9
EN

Stack Overflow用户

发布于 2011-12-07 23:10:41

您可以使用正则表达式模块。

代码语言:javascript
复制
import re
if (re.match('^[a-zA-Z0-9-_]*$',testString)):
    //successful match
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8417488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档