字符串提取与单引号

时间:2016-06-24 06:35:42

标签: python python-2.7 python-3.x

我希望使用下面的if语句检测一个字符串,但它给了我错误的输出。我无法检测到ARR。当我使用下面的if语句时,输出将是"错误"。当输入为ARR时,它应该会通过。

我的数据是这样的,我希望编辑我的if语句,而不是编辑我放置数据的方式。

['TPA']
['TPI']
['ABC']


if MM[0] == ('\'ARR\'' or '\'ABC\'' or '\'SAC\''):
    pass
else:
    print('wrong')

7 个答案:

答案 0 :(得分:1)

那是因为以下部分的结果是"'ARR'"

>>> ('\'ARR\'' or '\'ABC\'' or '\'SAC\'')
"'ARR'"

基本上,当两个操作数都为True时,or运算符将返回左操作数,因为所有字符串都被python评估为True,因此链接or操作的结果是第一个字符串。< / p>

为了解决这个问题,您可以使用in运算符和具有O(1)复杂度的set来简单检查成员资格:

if MM[0] in {"'ARR'", "'ABC'", "'SAC'"}

答案 1 :(得分:1)

我认为不是单引号会使代码输出意外,这是因为你使用了错误的if语句。

如果您想检查MM[0]是'ARR'还是'ABC'或'SAC',您需要使用

MM[0] == 'ARR' or MM[0] == 'ABC' or MM[0] == 'SAC'

MM[0] in ('ARR', 'ABC', 'SAC')

否则,('ARR' or 'ABC' or 'SAC')是一个总是返回'ARR'的表达式,所以

if MM[0]==('\'ARR\'' or '\'ABC\'' or '\'SAC\''):
仅当True为“ARR”时,

才会返回MM[0]。如果MM[0]为'ABC',那么if语句会返回False,您会看到'错误'打印出来。

答案 2 :(得分:0)

您应该使用in进行搜索。

if MM[0] in {"'ARR'", "'ABC'", "'SAC'"}

然后,不要用反斜杠逃到处处,这很难看。如果你知道你的字符串中有单引号,用双引号分隔它,它将更具可读性。

答案 3 :(得分:0)

我认为这应该有用

MM[0] in ('ARR', 'ABC','SAC')

干杯

答案 4 :(得分:0)

您应该将所有有效选项放在列表中,并执行列表成员资格检查,如下所示:

wanted = r"'ARR'"

if wanted in [r"'ARR'", r"'ABC'", r"'SAC'"]:
    print("Given value was a member of the list.")

字符串前面的r将它们表示为raw个字符串,它们将它们表示为具有不同规则的字符串,用于转义其中的某些字面值。

答案 5 :(得分:0)

MM=['ARR', 'ABC','SAC','WWW','ZZZ']


if MM[0] in ('ARR', 'ABC', 'SAC'):
    pass
else:
    print('wrong')

工作得很好。你过度思考它。你不必指定MM是一个数组,因为python可以解决这个问题。你也不必逃避单引号。您没有尝试匹配字符串'ARR',而是尝试匹配ARR

这适用于你提供的字符串...你试图遍历它们吗?:

MM = ['ARR', 'ABC', 'SAC', 'WWW', 'ZZZ']
for i in MM:
    if i in ('ARR', 'ABC', 'SAC'):
        print "Winner %s" % i
    else:
        print('wrong')

给出

Winner ARR
Winner ABC
Winner SAC
wrong
wrong

答案 6 :(得分:0)

\&#39; 会使&#39; 成为字符串的一部分。例如:

>>> str1 = '\'demo_string\''
>>> str1
"'demo_string'"

整个str1 'demo_string'

如果您想匹配 ARR ABC ......

data = 'ABC'
if data in ('ARR', 'ABC', 'SAC'):
    pass
else:
    print('wrong')

您还可以使用 " 来引用字符串,例如:

if data in ("ARR", "ABC", "SAC"):
    pass
else:
    print('wrong')

如果您想匹配'ABC',请尝试:

if data in ("'ARR'", "'ABC'", "'SAC'")
    pass
else:
    print('wrong')