国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

詳解python中正則表達(dá)式的反斜線的轉(zhuǎn)義功能

gggggggbong / 3456人閱讀

摘要:最近深入研讀了正則表達(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

相關(guān)文章

  • 《Java編程思想》筆記13.字符串

    摘要:的構(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對象,任何指向它...

    since1986 評論0 收藏0
  • 關(guān)于Java正則轉(zhuǎn)義和\理解

    摘要:作為的轉(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字...

    JerryZou 評論0 收藏0
  • PHP變量類型

    摘要:獲取變量的類型,使用函數(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...

    selfimpr 評論0 收藏0
  • 搞定PHP面試 - 正則達(dá)式知識(shí)點(diǎn)整理

    摘要:是決定正則表達(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è)字符串來...

    AaronYuan 評論0 收藏0
  • 正則達(dá)式之量詞

    摘要:點(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,...

    lansheng228 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<