是否有可能在数学字符串上使用isalpha(),并仍然在python中返回True?

时间:2017-03-15 22:27:30

标签: python string

例如,如果字符串全部小写,我想返回True,并且只包含字母字符(数学运算符除外)

例如: 'x'为True,'X'为False,'x+y'为True # here's where it doesn't work

我目前的情况是:

if not str.islower() or not str.isalpha():
    return False

当我x+y时,它全是lower,但字符串不是alpha。我想以某种方式ignore标准数学运算符+, -, *,因为 数学表达式。这可能没有太多代码吗?

4 个答案:

答案 0 :(得分:0)

您可以使用正则表达式:

import re
return bool(re.fullmatch(r'[a-z*/+-]+', 'x+y'))

答案 1 :(得分:0)

您可以使用正则表达式并将代码转换为:

import re
p = re.compile('^[a-z+*/-]+$')
return p.match(str)

答案 2 :(得分:0)

  

[...]如果字符串全部为小写,我想返回True,并且只包含字母字符(数学运算符除外)。

在我看来,最简单的解决方案就是制作自己的功能:

def is_valid_string(string, operators):
    string = ''.join([c for c in string if c not in operators])
    return all(c.isalpha() and c.lower() for c in string)

它可以像这样使用:

if is_valid_string(str):
    # code

通过这种方式,您可以轻松自定义哪些运算符被忽略,哪些运算符不被忽略。

答案 3 :(得分:0)

import string
comp = string.ascii_lowercase + "+-/*"

然后你的有效替代是:

if not all([False for char in str if char not in comp]):
    return False

为每个字符集使用一个集合in,并且仅构建故障列表(快速匹配)。

作为一项功能:

def valid(string):
    comp = string.ascii_lowercase + "+-/*"
    return all([False for char in str if char not in comp])