在Python中检查字符串是否包含某些字符
我想检查一个字符串是否只包含大写字母A到Z、小写字母a到z、数字0到9、下划线和短横线(_ -)。
其他特殊符号,比如!"#\%都不应该出现。
我该怎么写正则表达式呢?
然后用match
还是其他方法?
我的字符串像这样:QOIWU_W QWLJ2-1。
5 个回答
1
你可以使用正则表达式模块。
import re
if (re.match('^[a-zA-Z0-9-_]*$',testString)):
//successful match
9
使用 re
并不会有什么坏处,不过出于好奇,还有一种方法不需要用到 re
,那就是使用集合(sets):
>>> 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
为了简洁,测试函数也可以这样写:
>>> def test(s):
... return set(s) <= valid
编辑: 为了满足好奇心,稍微记录一下时间(时间单位是秒,每个测试实现运行三组迭代):
>>> 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
是的,re.match
看起来是个不错的选择(抱歉,开个玩笑)。至于正则表达式,你觉得像这样:'[A-Za-z0-9-_]*'
怎么样?