2011-02-12 99 views

回答

9

您不應該在逗號後放一個空格,並且{1}是多餘的。

+0

我已經接受你的答案,因爲它也提到了{1}部分。謝謝。 – user225312 2011-02-12 15:26:26

6

嘗試

p = re.compile('a{1}b{1,3}') 

...和心靈的空間。

+0

哇,我從來沒有想過,這可能會導致一個問題。 – user225312 2011-02-12 15:14:30

3

刪除b中多餘的空格。

變化:

p = re.compile('a{1}b{1, 3}') 

到:

p = re.compile('a{1}b{1,3}') 
         ^ # no whitespace 

,所有應該很好。

2

請勿在{}之間插入空格。

p = re.compile('a{1}b{1,3}') 
1

你可以使用VERBOSE標誌編譯正則表達式,這意味着正則表達式中的大部分空白將被忽略。我認爲這是一個非常好的練習,以更易讀的方式描述複雜的正則表達式。

here詳細信息...

希望這有助於...

+0

爲詳細旗標提示+1。 – arthurprs 2011-02-12 15:50:12

3

您已經看到了一些re的行爲,這是非常「黑暗的角落」,在一個(或兩個)的bug近了。

# Python 2.7.1 
>>> import re 
>>> pat = r"b{1, 3}\Z" 
>>> bool(re.match(pat, "bb")) 
False 
>>> bool(re.match(pat, "b{1, 3}")) 
True 
>>> bool(re.match(pat, "bb", re.VERBOSE)) 
False 
>>> bool(re.match(pat, "b{1, 3}", re.VERBOSE)) 
False 
>>> bool(re.match(pat, "b{1,3}", re.VERBOSE)) 
True 
>>> 

換句話說,"b{1, 3}"在正常模式下文字文本"b{1, 3}",並在詳細模式文字文本"b{1,3}"匹配的圖案。

的「最小驚訝的法」建議:(1)在3前面的空間被忽略和它在編譯時匹配"b""bb",或"bbb"酌情[優選]或(2)的異常。

看着它的另一種方式:兩種可能性:(一)誰寫"{1, 3}"處處洋溢着PEP8的精神,並認爲它是規範和應用無處不在的人(B)誰寫道,已經測試re無證行爲和人實際上想要匹配文字文本"b{1, 3}"並且相反想要使用r"b{1, 3}"而不是明確轉義:r"b\{1, 3}"。在我看來,(a)比(b)更可能,並且re應該相應地採取行動。

又一個角度:當到達空間時,它已經解析了{,一串數字和一個逗號,即順利進入{m,n}「經營者」 ......悄悄忽略了意外字符,並把它當作好像它是文字文本是令人難以置信的,Perl化等

更新Bug report提出。

相關問題