我在http://regexpal.com/上測試了以下代碼,它正確匹配我想要的字符串。我想找到它發生在中間的空間的4塊16個數字,所以我寫了下面的正則表達式:Python:意外的{n}匹配的正則表達式行爲
\d{4}(\s\d{4}){3}
即匹配4個數字,然後匹配一個空格,接着三個四個重複組數字。在regexpal,這正確匹配:
test1234消息
在Python,不過,我運行下面的代碼:
>>> import re
>>> p = re.compile('\d{4}(\s\d{4}){3}')
>>> p.findall('test1234 message1234 5678 1234 5678')
[' 5678']
>>>
我不明白爲什麼它匹配'5678'的第二個實例,以及爲什麼它不符合我所期望的數字塊。
我認爲你應該提到原始字符串是推薦寫正則表達式的方法,但是在這種情況下,問題來自於執行'findall',如果在正則表達式中有任何切換,它將使用捕獲組中的內容。 – nhahtdh 2015-02-10 07:28:57
謝謝...更新.. – 2015-02-10 07:37:02