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

man*_*ing 4 python

我想检查字符串是否只包含AZ和az以及0-9和下划线和短划线(_ - )

还有其他任何特殊标志!"#\%不应该包含在内

我怎么写正则表达式?

并使用match或?

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

Som*_*ude 8

是的,re.match似乎是一场很好的比赛(原谅双关语).至于正则表达式,这样的事情如何:'[A-Za-z0-9-_]*'

  • 您也可以使用[\ w-]代替[A-Za-z0-9-_] (3认同)

mac*_*mac 7

使用re不会以任何方式伤害,但仅仅是为了科学的好奇心,另一种不需要你通过的方法re是使用集合:

>>> 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
Run Code Online (Sandbox Code Playgroud)

为简明起见,还可以编写测试函数:

>>> def test(s):
...    return set(s) <= valid
Run Code Online (Sandbox Code Playgroud)

编辑:为了好奇而有点时间(时间以秒为单位,对于每个测试实现,它运行三组迭代):

>>> 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]
Run Code Online (Sandbox Code Playgroud)