摘要:最近深入研讀了正則表達式的一本經典著作,對于在中使用正則表達式時使用反斜線轉義功能時有些心得,特與大家分享。核心思想在中使用正則表達式時要切記反斜線具有兩層轉義功能,如果你要匹配一個反斜線本身時要注意它必須被轉義兩次。
最近深入研讀了正則表達式的一本經典著作,對于在python中使用正則表達式時使用反斜線轉義功能時有些心得,特與大家分享。
核心思想:在python中使用正則表達式時要切記反斜線具有兩層轉義功能,如果你要匹配一個反斜線本身時要注意它必須被轉義兩次。(除非你使用原始字符串,就是字符串前面加r)
我們先來看一個例子:
import re a = re.match("","")
File "", line 2 a = re.match("","") ^ SyntaxError: unexpected character after line continuation character
上面這個例子本身就不合語法要求,那么為什么呢? 首先在
python中,因為正則表達式本身是一個字符串,所以它要遵守字符串的規則——反斜線表示轉義符
而在正則表達式中反斜線又是一個具有轉義功能的元字符,所以反斜線具備了雙重轉義功能
回到例子中,第一個轉義了第二個,此時第二個去除了字符串轉義符的身份,但是它還有正則表達式轉義元字符的身份
也就是說第二個仍然具備轉義功能,那么它轉義誰呢?它只能轉義第三個,可是第三個它具備兩層身份(字符串的轉義符和正則表達式的轉義元字符)
所以現在有兩種可能情況發生:
第一種,第二個無法轉義第三個,因為身份不符,一個是正則表達式轉義元字符,另一個是字符串轉義符
第二種,第二個轉義了第三個,但是這種轉義也僅僅是去除了一層身份,但是它還有一層身分(轉義元字符)結果就是第三個仍然具有轉義功能。
總之不管這時發生了哪種情況,第三個最終結果就是仍然具備轉義功能,他會轉義它后面的單引號,使得整段代碼語法錯誤。
所以正確的寫法是再添加一個反斜線,四個反斜線,兩兩轉義之后最終轉義成匹配多帶帶一個反斜線的功能
import re a = re.match("","") print(a) #顯示的結果match="",之所以顯示兩個反斜線是因為語法規定一個反斜線無法顯示(是轉義符)
<_sre.SRE_Match object; span=(0, 1), match="">
當然也可以使用原始字符串的方法,在字符串前面加r,這時里面的反斜線就失去字符串轉義符的功能了,本文主要討論實質原理,不是方法
import re a = re.match(r"","") print(a)
<_sre.SRE_Match object; span=(0, 1), match="">
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/42560.html
摘要:的構造器經過重載可以接受多種輸出目的地,不過最常用的還是和。組號為表示整個表達式,組號表示被第一對括號括起的組,依此類推。有多個重載的構造器,可以接受和對象。 點擊進入我的博客 字符串操作是計算機程序設計中最常見的行為 13.1 不可變String String底層是由char[]實現的,是不可變的。看起來會改變String的方法,實際上都是創建了一個新的String對象,任何指向它...
摘要:作為的轉義字符在字符常量中,反斜杠是一個特殊的字符,被稱為轉義字符,它的作用是用來轉義后面一個字符。中的第一個表示的轉義字符由編譯器解析,第二個是正則表達式由正則表達式引擎解析。 的定義 一個轉義字符的目的是開始一個字符序列,使得轉義字符開頭的該字符序列具有不同于該字符序列單獨出現時的語義。 轉義就是指轉換該字符的原本意義,從而變成另外的意義。 作為Java的轉義字符 1.在java字...
摘要:是決定正則表達式匹配規則的主要部分。二分隔符分隔符的選擇當使用函數的時候,正則表達式必須由分隔符閉合包裹。果分隔符經常在正則表達式內出現,最好使用其他分隔符來提高可讀性。需要將一個字符串放入正則表達式中使用時,可以用函數對其進行轉義。 一、簡介 1. 什么是正則表達式 正則表達式(Regular Expression)就是用某種模式去匹配一類字符串的一種公式。正則表達式使用單個字符串來...
摘要:點號正則中,有一個特殊的特殊的元字符,點號,它可以匹配任意字符,除了換行符。表各種量詞的轉義量詞轉義形式除此之外,元字符點也需要加反斜線來進行轉義。 ??我們知道,在正則表達式中,可以使用[0-9]或d來匹配單個數字字符,但是,如果需要驗證一個更復雜的字符串呢,比如大陸地區的郵政編碼。??不過郵政編碼并沒有特別規定,只有由6個數字組成的字符串而已, 如246512,根據[0-9]或d,...
閱讀 2242·2021-09-23 11:52
閱讀 1910·2021-09-02 15:41
閱讀 3028·2019-08-30 10:47
閱讀 1993·2019-08-29 17:14
閱讀 2348·2019-08-29 16:16
閱讀 3198·2019-08-28 18:29
閱讀 3429·2019-08-26 13:30
閱讀 2617·2019-08-26 10:49