2011-04-13 139 views
-1
re.compile("a[b|c]d").findall("akjh adc abc abbd acd") 

爲什麼這隻簡單的正則表達式,爲什麼這不起作用?

['acd'] 

['abd', 'acd'] 

返回?

編輯:

我給了錯誤的榜樣......這就是原因。可刪除帖子..

+1

爲什麼會返回'abc'? – 2011-04-13 12:52:56

+0

對不起,愚蠢的錯誤...呃... – noisy 2011-04-13 12:55:25

+0

該字符串不包含'abd' – iamserious 2011-04-13 13:07:32

回答

2

你的正則表達式匹配任何字符串開頭a,與d和結尾無論是b,一個|c

如果您正在尋找有一張bad之間的c,你用方括號沒有管(a[bc]d您使用括號與管道(a(b|c)d)。方括號表示任意之間的字符被接受一次(包括|);圓括號表示任何以|分隔的正則表達式都被接受 - 在這種情況下,您將有兩個正則表達式,其中一個匹配b,另一個匹配c

我發現第一個選項是最好的選擇。但是,這些正則表達式不會以任何方式匹配abc。有很多正則表達式可以匹配兩個字符串,例如a[bc][cd]或(對我來說更有意義)a(bc|cd)

HTH。

3

正則表達式將匹配以a開頭的字符串,接着是b或c,然後是d。那就是:

'ABD'

'ACD'

2

你不需要管在字符類

re.compile("a[bc]d").findall("akjh adc abc abbd acd") 

模式說,搜索a,然後bc(即任何字符類),然後d。所以正則表達式只返回1個發現。

相關問題