如何检查字符串是否只包含python中给定集合的字符

时间:2013-12-22 03:40:14

标签: python string python-2.5

我有一个用户输入的多项式,如果它只有字符串1234567890^-+x中的字符,我只想使用它。

如何在不使用外部包的情况下检查是否存在?我只想使用内置的Python 2.5函数。

我正在编写一个可以在任何Mac上运行而无需外部程序包的程序。

6 个答案:

答案 0 :(得分:13)

以下是一些奇怪的事情:-)如何做到这一点:

good = set('1234567890^-+x')

if set(input_string) <= good:
    # it's good
else:
    # it's bad

if input_string.strip('1234567890^-+x'):
    # it's bad!
else:
    # it's good

答案 1 :(得分:10)

使用正则表达式:

import re

if re.match('^[-0-9^+x]*$', text):
    # Valid input

re模块附带Python 2.5,是您最快的选择。

演示:

>>> re.match('^[-0-9^+x]*$', '1x2^4-2')
<_sre.SRE_Match object at 0x10f0b6780>

答案 2 :(得分:4)

  1. 您可以将有效字符转换为set,因为集合提供更快的查找
  2. 然后您可以使用all这样的功能

    valid_chars = set("1234567890^-+x")  # Converting to a set
    if all(char in valid_chars for char in input_string):
        # Do stuff if input is valid
    
  3. 我们也可以将输入字符串转换为一个集合,并检查输入字符串中的所有字符是否都在有效列表中。

    valid_chars = set("1234567890^-+x")  # Converting to a set
    if set(input_string).issubset(valid_chars):
        # Do stuff if input is valid
    

答案 3 :(得分:2)

如何将字符串转换为集合并检查input_set is subset of good_set如下所示:

>>> good_set = set('1234567890^-+x')
>>> input_set1 = set('xajfb123')
>>> input_set2 = set('122-32+x')
>>> input_set1.issubset(good_set)
False
>>> input_set2.issubset(good_set)
True
>>>

答案 4 :(得分:1)

另一种方法,现在使用string.translate()

>>> import string
>>> all_chars = string.maketrans('', '')
>>> has_only = lambda s, valid_chars: not s.translate(all_chars, valid_chars)
>>> has_only("abc", "1234567890^-+x.")
False
>>> has_only("x^2", "1234567890^-+x.")
True

这不是最易读的方式。它应该是您需要的最快之一

答案 5 :(得分:0)

whitelist = '1234567890^-+x'

str = 'x^2+2x+1'
min([ch in whitelist for ch in str])
True


str='x**2 + 1' 
min([ch in whitelist for ch in str])
False