检查字符串是否仅包含给定的字符

时间:2014-11-02 19:55:40

标签: python string

我想知道是否有更优雅的方法来检查字符串(str ='abcccbbaabcbca')是否只包含'a','b'或'c'而不是迭代它:

for i in str:
   if i in ['a','b','c']:
      pass
   else :
      print('wrong character')

5 个答案:

答案 0 :(得分:7)

将两个字符串转换为集合并检查它们是否相等。如果是,则您的字符串包含ab以及c

valid = set(your_string) == set('abc')...

使用issubset检查它是否包含a,b,c:

中的任何一个
valid = set(your_string) <= set('abc')

valid = set(your_string).issubset('abc')

减去集合以找出无效字符:

bad_chars = set('abcXYcba') - set('abc') # set(X,Y)

答案 1 :(得分:6)

您可以将any与生成器表达式一起使用:

if any(c not in 'abc' for c in _str):  # Don't use str as a name.
    print('Wrong character')

答案 2 :(得分:2)

使用正则表达式:

import re
if re.search('[^abc]', string):
    print('wrong character')

答案 3 :(得分:1)

随意模拟,因为它直接跳转到正则表达式,但测试匹配&#34; ^ [abc] + $&#34;


    re.match('^[abc]+$', 'string')

答案 4 :(得分:1)

您还可以使用string.translate

import string

s = 'abcccbbaabcbca'
# translate character to empty ""
t = string.maketrans("","")

# if non-abc character is found s.translate will become the bad characters
if s.translate(t, 'abc'):
    print ('wrong character')

更新

同样从@PadraicCunningham指出

# for one off usage, you can skip making a translation table.

if s.translate(None, 'abc'):