首先看乙個問題:
輸出:import re
text = r"\學"
(text)
zz = r"\學"
result = re.findall(zz,text)
(result)
為什麼沒有匹配到反斜槓?\學
['學'
]
轉義:首先要理解乙個概念,python中內建的語法字元竄中有一些特殊的符號,那就是\
,被成為轉義字元。其中\
可以與很多字元結合形成一些特殊符號,例如\n
表示回車。
原始字串:
輸出:(r"\n"
("\n"
)
\n
在字串前面加r
即可將字串解析為原始字串,即所見即所得,\
不再具有特殊含義。
為什麼匹配不到import re
text = r"\學"
(text)
zz = r"\學"
result = re.findall(zz,text)
(result)
\
,明明都是原始字串,這裡要就是正則的問題了
符號意義
\w匹配字母數字及下劃線
\w匹配非字母數字及下劃線
\s匹配任意空白字元,等價於 [ \t\n\r\f]。
\s匹配任意非空字元
\d匹配任意數字,等價於 [0-9].
\d匹配任意非數字
\a匹配字串開始
因為 在正則中\
也是特殊符號。
所以要真正的匹配\
這個字元,正則匹配應該這樣寫r"\\"
,帶入題目中就是zz = r"\\學"
而如果不使用原始字串應該這樣寫:
輸出:import re
text = r"\學"
(text)
zz =
"\\\\學"
result = re.findall(zz,text)
(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...