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