确保只有一组特定的字符在字符串中

时间:2014-06-23 13:17:19

标签: python string

有没有办法确保只有字符'm''c''b'在一个字符串中而不诉诸正则表达式?

例如,如果用户输入“m”,程序将打印“Major”。如果用户输入'mc',程序将打印'Major,Critical'。

所以我想确保如果用户输入类似'mca'的内容,程序将打印'不适用'。

try:
    if 'a' in args.findbugs:
        if len(args.findbugs) > 1:
            print 'findbugs: Not an applicable argument.'
        else:
            print 'FINDBUGS:ALL'
    else:
        if 'm' in args.findbugs:
            print 'FINDBUGS:MAJOR'
        if 'c' in args.findbugs:
            print 'FINDBUGS:CRITICAL'
        if 'b' in args.findbugs:
            print 'FINDBUGS:BLOCKER'
except TypeError:
    print "FINDBUGS: NONE"

3 个答案:

答案 0 :(得分:5)

嗯,与你所描述的最简单的方法是:

some_string = 'mca'
if set(some_string) <= {'m', 'c', 'b'}:
    # The string contains only 'm', 'c', or 'b'.
else:
    # The string 'mca' does not match because of 'a'.

或者,如果您打算至少要求mcb

some_string = 'mca'
if set(some_string) & {'m', 'c', 'b'}:
    # The string contains 'm', 'c', or 'b', so 'mca' will match.

注意:正如bgporter所指出的,在小于2.7的Python版本中,集合文字表示法不可用。如果需要支持,请使用set(('m', 'c', 'b'))

答案 1 :(得分:4)

这是一种在线性时间内检查它的方法。

s = "blabla"
l = 'mcb'

print all(x in l for x in s)

答案 2 :(得分:1)

原油,但这会返回你需要的东西。

input not in itertools.combinations('mcb', 1) + itertools.combinations('mcb', 2) + itertools.combinations('mcb', 3)