這串代碼,是正則中當我想尋找字符串‘\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轉移一下,成了不能轉義的斜杠了。