[英]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'
。
如果要匹配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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.