2011-02-12 96 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提出。

相关问题