在Python中检查字符串是否包含某些字符

5 投票
5 回答
14837 浏览
提问于 2025-04-17 07:53

我想检查一个字符串是否只包含大写字母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-_]*'怎么样?

撰写回答