2015-09-06 52 views
3

最近,我刚刚发现re.escape有益于迅速从一个字符串获取正则表达式。当我传似'a b c'一个字符串,我很困惑的是,为什么每一个空间与\字符转义。 AFAIK,编写一个与该字符串匹配的等价表达式,不需要转义空格字符。为什么这种差异会发生?谢谢。为什么re.escape逃逸空间

回答

4

这样做,因为它是明确的。的空间可以从字面上匹配的空间,但它也可以是一个冗长的正则表达式,正则表达式的一部分,并且不被意味着匹配。

由此产生的正则表达式,我猜/a\ b\ c/,是一个非常明确的正则表达式,匹配一个a后跟一个空格,后跟一个b,后跟一个空格,后跟一个c。

如果你把它写自己,你也可以使用/a\sb\sc/这将匹配字母之间的任何空白。甚至:

r = re.compile(r"""a #match a 
b #match b 
C#match c 
""" 

这最后一个将与re.VERBOSE编译是写你的正则表达式非常精细的可读性在源代码的方式。这个正则表达式会完全忽略空格,因此不符合你的情况。对于正则表达式,请记住,所有不明确的事情,在凌晨3点都会失效。