2011-11-02 75 views
1

有人可以解釋這種奇怪的python行爲嗎?顯然,字符串'test'不包含'Bid'或'Ask'。爲什麼匹配?爲什麼這個python重新匹配?

import re 
pat=r'[Bid|Ask]' 
reg=re.compile(pat) 
if reg.search('test'): print "matched!" 

... 相配!

回答

10

[...]定義字符類,匹配中所列出的任何字符。你想要的是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 
+1

+1更快,並建議更好的方式,而不需要正則表達式。 – birryree

+1

或者根據您是否想要接受子字符串匹配,可能有'any(word中的單詞('Bid','Ask'))'。 – agf

+0

啊。謝謝。實際上,我需要匹配任何包含Bid或Ask的行,所以我認爲我仍然需要使用re。 – Dave31415

2

您的正則表達式只是一個包含字符'B','i','d','|','A','s'和'k'的字符集。 '測試'中有's'。

什麼你大概的意思是「(競標| ASK)」

5

[...]character class matcher,這意味着它將匹配集合中的任何字符。

你可能想要改變,像這樣:r'(Bid|Ask)'

+0

你不需要括號。 – rplnt

1

我想你想要()而不是[]。您已經告訴它匹配組Bid|Ask中的任何單個字符,而字符串包含s

+0

(該字符串包含* s *,而不是* d *。) – kojiro

+0

@kojiro,謝謝 - 我正在查看輸出字符串,而不是輸入! –

0

您的正則表達式正在搜索字符集B,i,d,|,A,s,k。 '''匹配'測試'內。

您應該省略括號。

另外,如果您不想匹配「Askify」等字符串,則需要再修正一下正則表達式。