濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Python re.sub 反向引用的實(shí)現(xiàn)

Python re.sub 反向引用的實(shí)現(xiàn)

熱門(mén)標(biāo)簽:銀川電話(huà)機(jī)器人電話(huà) 預(yù)覽式外呼系統(tǒng) 煙臺(tái)電話(huà)外呼營(yíng)銷(xiāo)系統(tǒng) 如何地圖標(biāo)注公司 外賣(mài)地址有什么地圖標(biāo)注 長(zhǎng)春極信防封電銷(xiāo)卡批發(fā) 企業(yè)彩鈴地圖標(biāo)注 電銷(xiāo)機(jī)器人錄音要學(xué)習(xí)什么 上海正規(guī)的外呼系統(tǒng)最新報(bào)價(jià)

re 模塊是 Python 標(biāo)準(zhǔn)庫(kù)中提供的用于處理正則表達(dá)式的模塊,利用 re 模塊可以方便的利用正則表達(dá)式實(shí)現(xiàn)字符串中的匹配、替換等操作

match 分組

Python re 模塊中提供了 match 函數(shù),用來(lái)匹配字符串中指定的正則表達(dá)式規(guī)則。例如,如果想匹配到 "Isaac Newton, physicist" 中的 Isaac Newton,則可以使用正則表達(dá)式 \w+ \w+ ,運(yùn)行結(jié)果如下:

>>> m = re.match("\w+ \w+", "Isaac Newton, physicist")
>>> m
re.Match object; span=(0, 12), match='Isaac Newton'>

re.match 的第一個(gè)參數(shù)是指定的正則表達(dá)式規(guī)則,第二個(gè)參數(shù)是待匹配的字符串。正則表達(dá)式規(guī)則 \w+ 表示匹配一段連續(xù)的字符,要求匹配到的字符數(shù)量大于 1。 \w+ \w+ 就表示匹配兩段連續(xù)的字符,且兩段字符中間用空格隔開(kāi)

使用 match 執(zhí)行匹配時(shí)會(huì)對(duì)匹配到的結(jié)果進(jìn)行 分組 ,可以通過(guò) match 返回結(jié)果的 group() 接口查看分組結(jié)果

>>> m.group(0)
'Isaac Newton'

默認(rèn)情況下, match 只會(huì)產(chǎn)生一個(gè)分組,就是第 0 個(gè)分組,表示整個(gè)匹配到的內(nèi)容。對(duì)于上面的例子,第 0 個(gè)分組就是 \w+ \w+ 匹配到的完整的內(nèi)容,也就是 Issac Newton 。
使用正則表達(dá)式中的括號(hào) () 可以手動(dòng)指定匹配的分組。例如如果想把 Issac 和 Newton 做為兩個(gè)分組,那么可以將正則表達(dá)式改為 (\w+) (\w+) :

>>> m = re.match("(\w+) (\w+)", "Isaac Newton, physicist")

在 (\w+) (\w+) 這個(gè)正則表達(dá)式中,指定了兩個(gè)分組,這兩個(gè)分組匹配的內(nèi)容都是 \w+ ,并且兩個(gè)分組之間用空格隔開(kāi)。
使用 groups() 可以查看匹配結(jié)果中的所有分組 :

>>> m.groups()
('Isaac', 'Newton')

也可以使用 group() 接口分別查看每一個(gè)分組,其中 group(0) 仍然表示完整的匹配結(jié)果, group(1) 表示匹配結(jié)果中的第 1 個(gè)分組, group(2) 表示第 2 個(gè)分組,以此類(lèi)推:

>>> m.group(0)
'Isaac Newton'
>>> m.group(1)
'Isaac'
>>> m.group(2)
'Newton'

re.sub 匹配和替換

re.match() 函數(shù)提供了正則表達(dá)式的匹配接口, re.sub() 不光能匹配正則表達(dá)式,還能替換字符串中的結(jié)果,生成一個(gè)新的字符串。
例如把字符串中 (\w+) (\w+) 匹配到的結(jié)果替換成 Albert Einstein ,可以這樣寫(xiě):

>>> re.sub("(\w+) (\w+)", "Albert Einstein", "Isaac Newton, physicist")
'Albert Einstein, physicist'

re.sub 中第 1 個(gè)參數(shù)表示匹配的正則表達(dá)式,第 2 個(gè)參數(shù)表示替換表達(dá)式,第 3 個(gè)參數(shù)表示原始字符串

這里的替換表達(dá)式是手動(dòng)指定的新字符串 Albert Einstein ,他和原始字符串中的內(nèi)容毫不相關(guān)。如果希望復(fù)用原始字符串中的內(nèi)容,那么就需要用到 re.sub 的反向引用功能了。

反向引用

反向引用指的是在指定替換結(jié)果的過(guò)程中,可以引用原始字符串中的匹配到內(nèi)容。例如 (\w+) (\w+) 在原始字符串中匹配到了 Isaac Newton ,利用匹配到的結(jié)果,將結(jié)果改寫(xiě)為 FirstName: Isaac, LastName: Newton 。
既然需要引用,那么就得有一個(gè)表達(dá)式能夠表示匹配的內(nèi)容。恰好 re.sub 的匹配結(jié)果也有和 re.match 一樣的分組,因此只需要在替換表達(dá)式中引用分組的結(jié)果即可。引用方式有以下幾種:

  • \number :例如 \1 ,表示匹配結(jié)果中第 1 個(gè)分組,也就是例子中的 Isaac 部分。
  • \gnumber> :例如 \g1> ,和 \number 表示法一樣,也代表了匹配結(jié)果中的第 1 個(gè)分組。與 \number 表示法相比, \gnumber> 避免了歧義。試想,如果想用 \number 把第 1 個(gè)分組匹配到的  Isaac 替換為 Isaac0 ,那么需要用 \10 ,這里本意表示在第 1 個(gè)分組后加上 0 ,但程序會(huì)識(shí)別成第 10 個(gè)分組。而使用 \gnumber> 只需要寫(xiě)成 \g1>0 即可。

回到開(kāi)始的例子中,將匹配結(jié)果 Isaac Newton改寫(xiě)為 FirstName: Isaac, LastName: Newton ,可以用以下表達(dá)式實(shí)現(xiàn):

>>> re.sub("(\w+) (\w+)", "FirstName: \g1>, LastName: \g2>", "Isaac Newton, physicist")
'FirstName: Isaac, LastName: Newton, physicist'

參考

 re — Regular expression operations
 Python re(gex)? -- Groupings and backreferences

到此這篇關(guān)于Python re.sub 反向引用的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python re.sub 反向引用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

您可能感興趣的文章:
  • 用Python代碼自動(dòng)生成文獻(xiàn)的IEEE引用格式的實(shí)現(xiàn)
  • 淺析Python模塊之間的相互引用問(wèn)題
  • python3爬蟲(chóng)中引用Queue的實(shí)例講解
  • python閉包與引用以及需要注意的陷阱
  • 詳解python如何引用包package
  • python 引用傳遞和值傳遞詳解(實(shí)參,形參)
  • Python參數(shù)傳遞機(jī)制傳值和傳引用原理詳解
  • Python參數(shù)傳遞對(duì)象的引用原理解析
  • python實(shí)現(xiàn)引用其他路徑包里面的模塊
  • python關(guān)于多級(jí)包之間的引用問(wèn)題

標(biāo)簽:宜昌 湖北 佳木斯 上饒 珠海 潮州 西寧 盤(pán)錦

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python re.sub 反向引用的實(shí)現(xiàn)》,本文關(guān)鍵詞  Python,re.sub,反向,引,用的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python re.sub 反向引用的實(shí)現(xiàn)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Python re.sub 反向引用的實(shí)現(xiàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    大冶市| 垫江县| 德令哈市| 富顺县| 大埔区| 原阳县| 合川市| 罗田县| 沂南县| 梁山县| 鄱阳县| 抚松县| 芮城县| 赤水市| 明溪县| 鲁甸县| 信阳市| 吴桥县| 溆浦县| 太白县| 印江| 瑞安市| 团风县| 巴南区| 乌恰县| 平乡县| 朝阳市| 东莞市| 女性| 漳州市| 金山区| 永修县| 宜丰县| 铜鼓县| 阿拉善右旗| 宁都县| 灵丘县| 六盘水市| 洪江市| 新晃| 仁化县|