簡體   English   中英

單引號字符串提取

[英]String extraction with single quote

我希望使用下面的if語句檢測一個字符串,但是它給我錯誤的輸出。 我無法檢測到ARR 當我在下面的if語句中使用時,輸出將為“錯誤”。 當我的輸入是ARR時,它應該通過。

我的數據就是這樣,我希望編輯我的if語句,而不是編輯我放置數據的方式。

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


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

這是因為以下部分的結果是"'ARR'"

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

基本上,當兩個操作數均為True時, or運算符將返回左操作數,在這里,因為所有字符串都被python評估為True,所以鏈式or操作的結果是第一個字符串。

為了解決這個問題並采用更Python的方法,您可以使用in運算符和具有O(1)復雜性的set簡單地檢查成員資格:

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

我認為不是單引號會使您的代碼輸出意外,這是因為您使用了錯誤的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\''):

僅當MM[0]為'ARR'時返回True 如果MM[0]為'ABC',則if語句返回False ,您將看到打印'錯誤'。

您應該使用in進行搜索。

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

然后,不要到處都有反斜杠,這很丑陋。 如果您知道您的字符串中包含單引號,請用雙引號將其定界,那么它將更具可讀性。

我認為這應該工作

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

干杯

您應該將所有有效選擇放入列表中,並執行列表成員資格檢查,如下所示:

wanted = r"'ARR'"

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

字符串前面的r表示它們為raw字符串,表示它們為具有不同規則的字符串,這些規則用於轉義一些文字值。

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

\\'將使'成為字符串的一部分。 例如:

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

整個str1'demo_string'

如果要匹配ARRABC ...

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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM