有人可以解釋這種奇怪的python行爲嗎?顯然,字符串'test'不包含'Bid'或'Ask'。爲什麼匹配?爲什麼這個python重新匹配?
import re
pat=r'[Bid|Ask]'
reg=re.compile(pat)
if reg.search('test'): print "matched!"
... 相配!
有人可以解釋這種奇怪的python行爲嗎?顯然,字符串'test'不包含'Bid'或'Ask'。爲什麼匹配?爲什麼這個python重新匹配?
import re
pat=r'[Bid|Ask]'
reg=re.compile(pat)
if reg.search('test'): print "matched!"
... 相配!
[...]
定義字符類,匹配中所列出的任何字符。你想要的是par = r'(Bid|Ask)'
。
但是,你應該不是在所有使用正則表達式這一點,請執行下列操作來代替:
if whatever in ('Bid', 'Ask'):
# it's one of these two
else:
# it isn't
如果您需要執行一個子檢查(感謝@agf):
if any(word in whatever for word in ('Bid', 'Ask')):
# one of the words is in the sting whatever
您的正則表達式只是一個包含字符'B','i','d','|','A','s'和'k'的字符集。 '測試'中有's'。
什麼你大概的意思是「(競標| ASK)」
我想你想要()
而不是[]
。您已經告訴它匹配組Bid|Ask
中的任何單個字符,而字符串包含s
。
(該字符串包含* s *,而不是* d *。) – kojiro
@kojiro,謝謝 - 我正在查看輸出字符串,而不是輸入! –
您的正則表達式正在搜索字符集B,i,d,|,A,s,k。 '''匹配'測試'內。
您應該省略括號。
另外,如果您不想匹配「Askify」等字符串,則需要再修正一下正則表達式。
+1更快,並建議更好的方式,而不需要正則表達式。 – birryree
或者根據您是否想要接受子字符串匹配,可能有'any(word中的單詞('Bid','Ask'))'。 – agf
啊。謝謝。實際上,我需要匹配任何包含Bid或Ask的行,所以我認爲我仍然需要使用re。 – Dave31415