1. 程式人生 > >python正則\\\d、\\\\d、r'\\d'的理解

python正則\\\d、\\\\d、r'\\d'的理解

  • 這串程式碼,是正則中當我想尋找字串‘\d’的時候可以使用的。
c = re.compile('\\\d')
s = c.search('\d')
if s:
    print(s.group())
#這樣可以查詢到要尋找的值,不過如果你使用:
c = re.compile('\\\\d')
s = c.search('\d')
if s:
    print(s.group())

也是可以尋找到的,為什麼會這樣?
我查詢理解了一下:
因為當我們要尋找的是‘\d’這個字串時,它在正則中表示的是匹配任何數字,是一個有特殊含義的字元,所以我們在寫正則的時候需要轉義‘\d’的’'是普通的槓,不會和’d’起連鎖反應
這時候我們要注意,轉義有兩個含義,一個是普通字串的轉義,另一個就是正則裡面的轉義;
比如:

‘\\d’前面兩個普通斜槓的轉義剩下一個不會轉義的斜槓,後面的\d又沒什麼特別作用,所以直接進入正則內(個人覺得是普通優於正則),這時候兩個斜槓轉義就剩下一個不會轉義的斜槓了。
'\\d’這個同上,前兩個普通斜槓的轉義剩下一個不會轉義的斜槓,不會轉義的斜槓與後面不起連鎖反應,但是別忘了這是4個,還有兩個普通斜槓的,所以進入正則之前就有了兩個不會轉義的斜槓,所以在進入正則後兩個斜槓轉義最終成了不能轉義的字元斜槓了。

這個也是可以這樣寫的:

c = re.compile(r'\\d')
s = c.search('\d')
if s:
    print(s.group())

但是’r’不是表示原生字串的嗎?為什麼加上了還要在上裡面轉義一下;
考慮下上面
兩個普通斜槓轉義為不能轉義的斜槓,在進入正則後才剛恢復能夠轉義,又被r轉移一下,成了不能轉義的斜槓了。
剛入門,努力多學點