摘要:最近深入研讀了正則表達(dá)式的一本經(jīng)典著作,對于在中使用正則表達(dá)式時(shí)使用反斜線轉(zhuǎn)義功能時(shí)有些心得,特與大家分享。核心思想在中使用正則表達(dá)式時(shí)要切記反斜線具有兩層轉(zhuǎn)義功能,如果你要匹配一個(gè)反斜線本身時(shí)要注意它必須被轉(zhuǎn)義兩次。
最近深入研讀了正則表達(dá)式的一本經(jīng)典著作,對于在python中使用正則表達(dá)式時(shí)使用反斜線轉(zhuǎn)義功能時(shí)有些心得,特與大家分享。
核心思想:在python中使用正則表達(dá)式時(shí)要切記反斜線具有兩層轉(zhuǎn)義功能,如果你要匹配一個(gè)反斜線本身時(shí)要注意它必須被轉(zhuǎn)義兩次。(除非你使用原始字符串,就是字符串前面加r)
我們先來看一個(gè)例子:
import re a = re.match("","")
File "", line 2 a = re.match("","") ^ SyntaxError: unexpected character after line continuation character
上面這個(gè)例子本身就不合語法要求,那么為什么呢? 首先在
python中,因?yàn)檎齽t表達(dá)式本身是一個(gè)字符串,所以它要遵守字符串的規(guī)則——反斜線表示轉(zhuǎn)義符
而在正則表達(dá)式中反斜線又是一個(gè)具有轉(zhuǎn)義功能的元字符,所以反斜線具備了雙重轉(zhuǎn)義功能
回到例子中,第一個(gè)轉(zhuǎn)義了第二個(gè),此時(shí)第二個(gè)去除了字符串轉(zhuǎn)義符的身份,但是它還有正則表達(dá)式轉(zhuǎn)義元字符的身份
也就是說第二個(gè)仍然具備轉(zhuǎn)義功能,那么它轉(zhuǎn)義誰呢?它只能轉(zhuǎn)義第三個(gè),可是第三個(gè)它具備兩層身份(字符串的轉(zhuǎn)義符和正則表達(dá)式的轉(zhuǎn)義元字符)
所以現(xiàn)在有兩種可能情況發(fā)生:
第一種,第二個(gè)無法轉(zhuǎn)義第三個(gè),因?yàn)樯矸莶环粋€(gè)是正則表達(dá)式轉(zhuǎn)義元字符,另一個(gè)是字符串轉(zhuǎn)義符
第二種,第二個(gè)轉(zhuǎn)義了第三個(gè),但是這種轉(zhuǎn)義也僅僅是去除了一層身份,但是它還有一層身分(轉(zhuǎn)義元字符)結(jié)果就是第三個(gè)仍然具有轉(zhuǎn)義功能。
總之不管這時(shí)發(fā)生了哪種情況,第三個(gè)最終結(jié)果就是仍然具備轉(zhuǎn)義功能,他會(huì)轉(zhuǎn)義它后面的單引號,使得整段代碼語法錯(cuò)誤。
所以正確的寫法是再添加一個(gè)反斜線,四個(gè)反斜線,兩兩轉(zhuǎn)義之后最終轉(zhuǎn)義成匹配多帶帶一個(gè)反斜線的功能
import re a = re.match("","") print(a) #顯示的結(jié)果match="",之所以顯示兩個(gè)反斜線是因?yàn)檎Z法規(guī)定一個(gè)反斜線無法顯示(是轉(zhuǎn)義符)
<_sre.SRE_Match object; span=(0, 1), match="">
當(dāng)然也可以使用原始字符串的方法,在字符串前面加r,這時(shí)里面的反斜線就失去字符串轉(zhuǎn)義符的功能了,本文主要討論實(shí)質(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://specialneedsforspecialkids.com/yun/42560.html
摘要:的構(gòu)造器經(jīng)過重載可以接受多種輸出目的地,不過最常用的還是和。組號為表示整個(gè)表達(dá)式,組號表示被第一對括號括起的組,依此類推。有多個(gè)重載的構(gòu)造器,可以接受和對象。 點(diǎn)擊進(jìn)入我的博客 字符串操作是計(jì)算機(jī)程序設(shè)計(jì)中最常見的行為 13.1 不可變String String底層是由char[]實(shí)現(xiàn)的,是不可變的。看起來會(huì)改變String的方法,實(shí)際上都是創(chuàng)建了一個(gè)新的String對象,任何指向它...
摘要:作為的轉(zhuǎn)義字符在字符常量中,反斜杠是一個(gè)特殊的字符,被稱為轉(zhuǎn)義字符,它的作用是用來轉(zhuǎn)義后面一個(gè)字符。中的第一個(gè)表示的轉(zhuǎn)義字符由編譯器解析,第二個(gè)是正則表達(dá)式由正則表達(dá)式引擎解析。 的定義 一個(gè)轉(zhuǎn)義字符的目的是開始一個(gè)字符序列,使得轉(zhuǎn)義字符開頭的該字符序列具有不同于該字符序列單獨(dú)出現(xiàn)時(shí)的語義。 轉(zhuǎn)義就是指轉(zhuǎn)換該字符的原本意義,從而變成另外的意義。 作為Java的轉(zhuǎn)義字符 1.在java字...
摘要:獲取變量的類型,使用函數(shù)。要檢驗(yàn)?zāi)硞€(gè)類型,可以使用函數(shù),如是在整形是在浮點(diǎn)型是在字符串如果需要將一個(gè)變量強(qiáng)制轉(zhuǎn)換為某類型,可以對其使用強(qiáng)制轉(zhuǎn)換或者函數(shù)。自起,此限制僅對包含變量時(shí)有效。 簡介 PHP支持9種原始數(shù)據(jù)類型。 4種標(biāo)量類型: boolean布爾型 integer 整形 float 浮點(diǎn)型(也稱作double) string 字符串 3種復(fù)合類型: array...
摘要:是決定正則表達(dá)式匹配規(guī)則的主要部分。二分隔符分隔符的選擇當(dāng)使用函數(shù)的時(shí)候,正則表達(dá)式必須由分隔符閉合包裹。果分隔符經(jīng)常在正則表達(dá)式內(nèi)出現(xiàn),最好使用其他分隔符來提高可讀性。需要將一個(gè)字符串放入正則表達(dá)式中使用時(shí),可以用函數(shù)對其進(jìn)行轉(zhuǎn)義。 一、簡介 1. 什么是正則表達(dá)式 正則表達(dá)式(Regular Expression)就是用某種模式去匹配一類字符串的一種公式。正則表達(dá)式使用單個(gè)字符串來...
摘要:點(diǎn)號正則中,有一個(gè)特殊的特殊的元字符,點(diǎn)號,它可以匹配任意字符,除了換行符。表各種量詞的轉(zhuǎn)義量詞轉(zhuǎn)義形式除此之外,元字符點(diǎn)也需要加反斜線來進(jìn)行轉(zhuǎn)義。 ??我們知道,在正則表達(dá)式中,可以使用[0-9]或d來匹配單個(gè)數(shù)字字符,但是,如果需要驗(yàn)證一個(gè)更復(fù)雜的字符串呢,比如大陸地區(qū)的郵政編碼。??不過郵政編碼并沒有特別規(guī)定,只有由6個(gè)數(shù)字組成的字符串而已, 如246512,根據(jù)[0-9]或d,...
閱讀 2233·2021-09-23 11:52
閱讀 1899·2021-09-02 15:41
閱讀 3018·2019-08-30 10:47
閱讀 1984·2019-08-29 17:14
閱讀 2337·2019-08-29 16:16
閱讀 3192·2019-08-28 18:29
閱讀 3418·2019-08-26 13:30
閱讀 2610·2019-08-26 10:49