您好,登錄后才能下訂單哦!
今天小編給大家分享一下Python re.sub反向引用怎么實(shí)現(xiàn)的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
re 模塊是 Python 標(biāo)準(zhǔn)庫中提供的用于處理正則表達(dá)式的模塊,利用 re 模塊可以方便的利用正則表達(dá)式實(shí)現(xiàn)字符串中的匹配、替換等操作
Python re 模塊中提供了 match 函數(shù),用來匹配字符串中指定的正則表達(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 的第一個參數(shù)是指定的正則表達(dá)式規(guī)則,第二個參數(shù)是待匹配的字符串。正則表達(dá)式規(guī)則 \w+ 表示匹配一段連續(xù)的字符,要求匹配到的字符數(shù)量大于 1。 \w+ \w+ 就表示匹配兩段連續(xù)的字符,且兩段字符中間用空格隔開
使用 match 執(zhí)行匹配時會對匹配到的結(jié)果進(jìn)行 分組 ,可以通過 match 返回結(jié)果的 group() 接口查看分組結(jié)果
>>> m.group(0) 'Isaac Newton'
默認(rèn)情況下, match 只會產(chǎn)生一個分組,就是第 0 個分組,表示整個匹配到的內(nèi)容。對于上面的例子,第 0 個分組就是 \w+ \w+ 匹配到的完整的內(nèi)容,也就是 Issac Newton 。
使用正則表達(dá)式中的括號 () 可以手動指定匹配的分組。例如如果想把 Issac 和 Newton 做為兩個分組,那么可以將正則表達(dá)式改為 (\w+) (\w+) :
>>> m = re.match("(\w+) (\w+)", "Isaac Newton, physicist")
在 (\w+) (\w+) 這個正則表達(dá)式中,指定了兩個分組,這兩個分組匹配的內(nèi)容都是 \w+ ,并且兩個分組之間用空格隔開。
使用 groups() 可以查看匹配結(jié)果中的所有分組 :
>>> m.groups() ('Isaac', 'Newton')
也可以使用 group() 接口分別查看每一個分組,其中 group(0) 仍然表示完整的匹配結(jié)果, group(1) 表示匹配結(jié)果中的第 1 個分組, group(2) 表示第 2 個分組,以此類推:
>>> m.group(0) 'Isaac Newton' >>> m.group(1) 'Isaac' >>> m.group(2) 'Newton'
re.match() 函數(shù)提供了正則表達(dá)式的匹配接口, re.sub() 不光能匹配正則表達(dá)式,還能替換字符串中的結(jié)果,生成一個新的字符串。
例如把字符串中 (\w+) (\w+) 匹配到的結(jié)果替換成 Albert Einstein ,可以這樣寫:
>>> re.sub("(\w+) (\w+)", "Albert Einstein", "Isaac Newton, physicist") 'Albert Einstein, physicist'
re.sub 中第 1 個參數(shù)表示匹配的正則表達(dá)式,第 2 個參數(shù)表示替換表達(dá)式,第 3 個參數(shù)表示原始字符串
這里的替換表達(dá)式是手動指定的新字符串 Albert Einstein ,他和原始字符串中的內(nèi)容毫不相關(guān)。如果希望復(fù)用原始字符串中的內(nèi)容,那么就需要用到 re.sub 的反向引用功能了。
反向引用指的是在指定替換結(jié)果的過程中,可以引用原始字符串中的匹配到內(nèi)容。例如 (\w+) (\w+) 在原始字符串中匹配到了 Isaac Newton ,利用匹配到的結(jié)果,將結(jié)果改寫為 FirstName: Isaac, LastName: Newton 。
既然需要引用,那么就得有一個表達(dá)式能夠表示匹配的內(nèi)容。恰好 re.sub 的匹配結(jié)果也有和 re.match 一樣的分組,因此只需要在替換表達(dá)式中引用分組的結(jié)果即可。引用方式有以下幾種:
\number :例如 \1 ,表示匹配結(jié)果中第 1 個分組,也就是例子中的 Isaac 部分。
\g<number> :例如 \g<1> ,和 \number 表示法一樣,也代表了匹配結(jié)果中的第 1 個分組。與 \number 表示法相比, \g<number> 避免了歧義。試想,如果想用 \number 把第 1 個分組匹配到的 Isaac 替換為 Isaac0 ,那么需要用 \10 ,這里本意表示在第 1 個分組后加上 0 ,但程序會識別成第 10 個分組。而使用 \g<number> 只需要寫成 \g<1>0 即可。
回到開始的例子中,將匹配結(jié)果 Isaac Newton改寫為 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'
以上就是“Python re.sub反向引用怎么實(shí)現(xiàn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。