中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python re.sub反向引用的實現方法

發布時間:2021-07-07 17:17:29 來源:億速云 閱讀:244 作者:chen 欄目:開發技術

這篇文章主要講解了“Python re.sub反向引用的實現方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python re.sub反向引用的實現方法”吧!

目錄
  • match 分組

  • re.sub 匹配和替換

  • 反向引用

  • 參考

re 模塊是 Python 標準庫中提供的用于處理正則表達式的模塊,利用 re 模塊可以方便的利用正則表達式實現字符串中的匹配、替換等操作

match 分組

Python re 模塊中提供了 match 函數,用來匹配字符串中指定的正則表達式規則。例如,如果想匹配到 "Isaac Newton, physicist" 中的 Isaac Newton,則可以使用正則表達式 \w+ \w+ ,運行結果如下:

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

re.match 的第一個參數是指定的正則表達式規則,第二個參數是待匹配的字符串。正則表達式規則 \w+ 表示匹配一段連續的字符,要求匹配到的字符數量大于 1。 \w+ \w+ 就表示匹配兩段連續的字符,且兩段字符中間用空格隔開

使用 match 執行匹配時會對匹配到的結果進行 分組 ,可以通過 match 返回結果的 group() 接口查看分組結果

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

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

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

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

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

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

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

re.sub 匹配和替換

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

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

re.sub 中第 1 個參數表示匹配的正則表達式,第 2 個參數表示替換表達式,第 3 個參數表示原始字符串

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

反向引用

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

  • \number :例如 \1 ,表示匹配結果中第 1 個分組,也就是例子中的 Isaac 部分。

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

回到開始的例子中,將匹配結果 Isaac Newton改寫為 FirstName: Isaac, LastName: Newton ,可以用以下表達式實現:

>>> 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

感謝各位的閱讀,以上就是“Python re.sub反向引用的實現方法”的內容了,經過本文的學習后,相信大家對Python re.sub反向引用的實現方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辽中县| 涞源县| 柏乡县| 共和县| 介休市| 海晏县| 蒲城县| 丰城市| 军事| 景德镇市| 江门市| 普宁市| 朔州市| 崇文区| 盈江县| 淳安县| 儋州市| 左云县| 黎平县| 商河县| 洛扎县| 秦皇岛市| 会昌县| 晴隆县| 玉树县| 岳阳市| 图木舒克市| 梅河口市| 南阳市| 揭东县| 凤冈县| 镇巴县| 施甸县| 湛江市| 陈巴尔虎旗| 金门县| 都昌县| 灵寿县| 玛纳斯县| 淳化县| 华坪县|