Python re.sub 反向引用的實(shí)現(xiàn)
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 部分。 g<number> :例如 g<1> ,和 number 表示法一樣,也代表了匹配結(jié)果中的第 1 個(gè)分組。與 number 表示法相比, g<number> 避免了歧義。試想,如果想用 number 把第 1 個(gè)分組匹配到的 Isaac 替換為 Isaac0 ,那么需要用 10 ,這里本意表示在第 1 個(gè)分組后加上 0 ,但程序會(huì)識(shí)別成第 10 個(gè)分組。而使用 g<number> 只需要寫(xiě)成 g<1>0 即可。回到開(kāi)始的例子中,將匹配結(jié)果 Isaac Newton改寫(xiě)為 FirstName: Isaac, LastName: Newton ,可以用以下表達(dá)式實(shí)現(xiàn):
>>> re.sub('(w+) (w+)', 'FirstName: g<1>, LastName: g<2>', '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)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. IntelliJ IDEA設(shè)置自動(dòng)提示功能快捷鍵的方法2. idea重置默認(rèn)配置的方法步驟3. idea 打包的jar運(yùn)行報(bào) "XXX中沒(méi)有主清單屬性"4. Docker 部署 Prometheus的安裝詳細(xì)教程5. 通過(guò)Django Admin+HttpRunner1.5.6實(shí)現(xiàn)簡(jiǎn)易接口測(cè)試平臺(tái)6. IntelliJ IDEA安裝插件的方法步驟7. php過(guò)濾器使用詳解8. idea打開(kāi)多個(gè)窗口的操作方法9. idea設(shè)置代碼格式化的方法步驟10. IntelliJ IDEA調(diào)整字體大小的方法

網(wǎng)公網(wǎng)安備