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

use*_*538 6 python string python-2.5

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

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

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

Tim*_*ers 14

这里有一些奇怪的:-)方法:

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

if set(input_string) <= good:
    # it's good
else:
    # it's bad
Run Code Online (Sandbox Code Playgroud)

要么

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

  • 我喜欢 set 子集方法 :-) 关心一下`timeit`吗? (2认同)

Mar*_*ers 10

使用正则表达式:

import re

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

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

演示:

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


the*_*eye 4

  1. 您可以将有效字符转换为 a 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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我们可以将输入字符串也转换为一个集合,并检查输入字符串中的所有字符是否都在有效列表中。

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

  • 这不是将字符串转换为集合的语法;而是将字符串转换为集合的语法。你想要 `set("1234567890^-+x")`。(为什么我先看到另一件事?) (2认同)