如何在 Python 正則表示式中轉義任何特殊字元?
正則表示式,通常稱為 regexp,是查詢和操作文字字串的強大工具,尤其是在處理文字檔案時。正則表示式可以輕鬆地用一行程式碼替換數百行計算機程式碼。
所有指令碼語言,包括 Perl、Python、PHP、JavaScript、通用程式語言(如 Java),甚至像 Word 這樣的文字處理器,都支援用於文字搜尋的正則表示式。正則表示式由於其複雜的語法而可能難以學習,但這是值得花費的時間。
特殊字元
當包含特殊字元時,文字處理變得更具挑戰性,因為必須仔細考慮上下文。在檢視使用正則表示式的 Python 程式碼時,您必須考慮您看到的內容、Python 看到的內容以及正則表示式引擎看到的內容。Python 可能認為某個字元是唯一的,而正則表示式可能不認為是唯一的,反之亦然。
本文介紹了在各種情況下處理特殊字元的具體示例。
繞過某些 TeX 字元
我們最近需要一個正則表示式來轉義 TeX 的特殊字元。為了讓 TeX 將下劃線識別為文字下劃線和下標命令,我們需要將類似 ICD9 CODE 的文字轉換為 ICD9 CODE。
TeX 比下劃線有更多值得記憶的字元。它有 10 個特殊字元 -
\ { } $ & # ^ _% ~
由於它們在日常語言中無處不在,$ 和 % 可能是人們最常遇到的兩個字元。匯入百分號而不轉義它會導致靜默失敗,因為在 TeX 中,% 表示註釋的開始。結果在語法上是正確的。簡單地說,它結束了句子的其餘部分。
正則表示式中的反斜槓 () 表示以下之一 -
根據下一節中的表格,它後面的字元是唯一的。例如,符號 b、t 和 x020 分別表示正則表示式匹配應從單詞邊界、製表符和空格開始。
任何原本會被理解為語言結構的字元都應該按字面意思理解。例如,量詞的定義以大括號 () 開頭,但如果後面跟著反斜槓 (),則正則表示式引擎應該匹配大括號。同樣,反斜槓 (/) 表示轉義語言結構的開始,但兩個反斜槓 () 表示正則表示式引擎應該匹配反斜槓。
原始字串
在這種情況下正在發生一些有趣的事情。大多數 TeX 特定字元不是 Python 特定的。但是,反斜槓對兩者都是唯一的。正則表示式對反斜槓也有特殊情況。Python 透過引號前面的 r 字首被告知這是一個“原始”字串,並且反斜槓不應該被區別對待。它表示希望一個以兩個反斜槓開頭的字串。
為什麼要使用兩個反斜槓?為什麼不只這樣做?反斜槓在正則表示式中是特殊的,這就是我們將使用此字串的地方。很快,更多關於它。
解決方案
對於正則表示式模式,答案是使用 Python 的原始字串表示法;在以“r”為字首的字串文字中,反斜槓不會被區別對待。因此,“r"\n”是由字元“”和“n”組成的兩個字元的字串,而“\n”是一個包含換行符的一個字元的字串。這種原始字串表示法通常用於 Python 程式中表達模式。
語法
line = r"\String"
r”\String” 將句子讀取為原始字串,而“\r”是回車符。
示例 1
#importing re import re #using escape method to escape special character re. (r'\ a.*$') '\\ a\.\*\$' #printing the escaped character print(re.escape(r'\ a.*$'))
輸出
\ a\.\*\$
示例 2
#importing re
import re
#using escape method to escape special character
re.escape('www.stackoverflow.com')
'www\.stackoverflow\.com'
#printing the escaped character
print(re.escape('www.stackoverflow.com'))
輸出
www\.stackoverflow\.com
程式碼解釋
我們向後看的表達方式因我們正在尋找一個特殊字元而變得複雜。我們正在尋找的是反斜槓,它是正則表示式的特殊字元。
在確保沒有反斜槓並檢查後面是否有反斜槓後,我們搜尋我們的特殊字元。為了讓正則表示式引擎識別兩個反斜槓並將它們解釋為一個文字反斜槓,我們在宣告變數 special 時使用了兩個反斜槓。
我們希望指示 re.sub 在初始捕獲之前加上反斜槓。我們傳遞 \ 來表示文字反斜槓,因為正則表示式引擎對反斜槓的處理方式不同。當我們用 \1 表示初始捕獲來跟隨它時,結果與之前相同。
結論
反斜槓 () 在 Regex 中有兩個作用:在元字元(如 d(數字)、D(非數字)、s(空格)、S(非空格)、w(單詞)和 W(非單詞))的情況下。為了避免使用特殊正則表示式字元,例如 . 用於 .、+ 用於 +、* 用於 * 和 ? 用於 ?。在正則表示式中,您還必須使用單詞“for”來防止歧義。此外,Regex 將 n 解釋為換行符,t 解釋為製表符,等等。請注意,反斜槓字元 () 也用於 Python 中字串的轉義序列。例如,“\n”表示換行符,“\t”表示製表符,您還必須為 \ 編寫“” 。因此,在這些語言中,您必須編寫“” (兩級轉義!!!)來編寫正則表示式模式(它匹配一個)。等價於正則表示式元字元 \d 的“\d”。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP