關於python轉義字元在正則匹配中的問題研究

2021-10-10 06:39:01 字數 1802 閱讀 1287

首先看乙個問題:

import re

text = r"\學"

print

(text)

zz = r"\學"

result = re.findall(zz,text)

print

(result)

輸出:

\學

['學'

]

為什麼沒有匹配到反斜槓?

轉義:首先要理解乙個概念,python中內建的語法字元竄中有一些特殊的符號,那就是\,被成為轉義字元。其中\可以與很多字元結合形成一些特殊符號,例如\n表示回車。

原始字串:

print

(r"\n"

)print

("\n"

)

輸出:

\n
在字串前面加r即可將字串解析為原始字串,即所見即所得,\不再具有特殊含義。

import re

text = r"\學"

print

(text)

zz = r"\學"

result = re.findall(zz,text)

print

(result)

為什麼匹配不到\,明明都是原始字串,這裡要就是正則的問題了

符號意義

\w匹配字母數字及下劃線

\w匹配非字母數字及下劃線

\s匹配任意空白字元,等價於 [ \t\n\r\f]。

\s匹配任意非空字元

\d匹配任意數字,等價於 [0-9].

\d匹配任意非數字

\a匹配字串開始

因為 在正則中\也是特殊符號。

所以要真正的匹配\這個字元,正則匹配應該這樣寫r"\\",帶入題目中就是zz = r"\\學"

而如果不使用原始字串應該這樣寫:

import re

text = r"\學"

print

(text)

zz =

"\\\\學"

result = re.findall(zz,text)

print

(result)

輸出:

\學

['\\學'

]ve

已經匹配出來了,簡單解釋一下"\\\\學"首先根據python內建的字串解析,解析成實際的字串表示的就是\\學(也就是原始字串),再由於正則語法解析就能解析出真正要匹配的字串是\學

其實導致二次轉義的這個問題的原因:

\在python中字串中是特殊符號,並且在正則中也是特殊符號,所以才需要轉義兩次

通過上面這個問題可以看到匹配出的內容是\\學',也就是匹配出顯示的內容不是以原始字串的形式顯示的,而print()輸出的內容是字元都是轉義後的(轉義字元生效),例如print('\n')輸出的是真的換行而不是\n,而正則匹配出的內容更像是**格式的字串。

Python轉義字元

在需要在字元中使用特殊字元時,python 用反斜槓 轉義字元。如下表 原始字串 有時我們並不想讓轉義字元生效,我們只想顯示字串原來的意思,這就要用r和 r來定義原始字串。如 print r t r 實際輸出為 t r 轉義字元 描述 在行尾時 續行符 反斜槓符號 單引號 雙引號 a 響鈴 b 退格...

Python轉義字元

在需要在字元中使用特殊字元時,python用反斜槓 轉義字元。如下表 原始字串 有時我們並不想讓轉義字元生效,我們只想顯示字串原來的意思,這就要用r和r來定義原始字串。如 print r t r 實際輸出為 t r 轉義字元 描述 在行尾時 續行符 反斜槓符號 單引號 雙引號 a響鈴 b退格 bac...

Python轉義字元

在需要在字元中使用特殊字元時,python用反斜槓 轉義字元。如下表 原始字串 有時我們並不想讓轉義字元生效,我們只想顯示字串原來的意思,這就要用r和r來定義原始字串。如 print r t r 實際輸出為 t r 轉義字元 描述 在行尾時 續行符 反斜槓符號 單引號 雙引號 a響鈴 b退格 bac...