我们如何确定字符串是否仅由'A'
'B'
或'C'
组成?
例如,如果单词是'ABCBABCBABCBCABCA'
,那么就可以了,或者生成True
。
但如果单词为'ABCABC%'
,那么它会return
False
?
答案 0 :(得分:4)
Python使用set()
:
>>> def validate(my_string, ok='ABC'):
... return set(my_string) <= set(ok)
...
>>> s = 'ABCBABCBABCBCABCA'
>>> validate(s)
True
>>> s2 = 'ABCABC%'
>>> validate(s2)
False
>>> s3 = 'ABBA'
>>> validate(s3)
True
注意:如果您想要return
False
,如果未使用所有白名单字符,只需将<=
更改为==
}。
答案 1 :(得分:2)
In [10]: def isChars(s, chars):
....: if all(char in set(chars) for char in s):
....: return True
....: else:
....: return False
....:
In [11]: s = "ABCBABCBABCBCABCA"
In [12]: isChars(s, "ABC")
Out[12]: True
In [13]: s = "ABCBABCBABCBCABCA%"
In [14]: isChars(s, "ABC")
Out[14]: False
当然,正如@ larsga指出的那样,你可以将isChars
缩减为一行函数:
def isChars(s, chars):
return all(char in set(chars) for char in s)
这实际上是@jonsharpe所做的
答案 2 :(得分:1)
您可以使用正则表达式:
>>> import re
>>> pattern="^[ABC]+$"
>>> s1="ABCBABCBABCBCABCA"
>>> s2="ABCABC%"
>>> re.match(pattern,s1)
<_sre.SRE_Match object at 0x10d75f7e8>
>>> re.match(pattern,s2)
>>>
将此包装在函数中以返回true或false是微不足道的。学习正则表达式进行字符串匹配是必不可少的。
答案 3 :(得分:1)
也许最简单的方法是:
def check(word, chars):
"""Check that a word only contains chars."""
return all(c in chars for c in word)
答案 4 :(得分:1)
你也可以这样做:
all_abc = not your_text.translate(None, 'ABC')