2015-09-06 68 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點都會失效。