Python中sub()的用法說明

Python來進行查詢和替換一個文本字符串?

可以使用sub()方法來進行查詢和替換,sub方法的格式為:

sub(replacement, string[, count=0])

replacement是被替換成的文本

string是需要被替換的文本

count是一個可選參數,指最大被替換的數量

例子:

import re
p = re.compile('(blue|white|red)')
print(p.sub('colour','blue socks and red shoes'))
print(p.sub('colour','blue socks and red shoes', count=1))

輸出:

colour socks and colour shoes
colour socks and red shoes

subn()方法執行的效果跟sub()一樣,不過它會返回一個二維數組,包括替換後的新的字符串和總共替換的數量

例如:

import re
p = re.compile('(blue|white|red)')
print(p.subn('colour','blue socks and red shoes'))
print(p.subn('colour','blue socks and red shoes', count=1))

輸出

('colour socks and colour shoes', 2)
('colour socks and red shoes', 1)

補充:Python中正則表達式sub函數用法總結

正則表達式一個比較常見的用途是找到所有模式匹配的字符串並用不同的字符串來替換它們。sub方法提供一個替換值,可以是字符串或函數,和一個要被處理的字符串。

1、這裡的sub方法,是被編譯成‘RegexObject’實例後的實例的方法

Sub(replacement,string[,count =0 ])

1)返回的字符串是在字符串中用RE最左邊不重復的匹配來替換。如果模式沒有被發現,字符將沒有被改變的返回。

2)可選參數count是模式匹配後替換的最大次數;count必須是非負整數。缺省值是0表示替換所有的匹配。

例子:

2、模塊級函數:sub方法

註:這些函數(包括sub函數)使用RE字符串作為第一個參數,而後面的參數與相應的“RegexObject”方法的參數相同,返回要麼是None,要麼是一個‘MatchObject’實例。

(實際sub返回的是字符串,,兩者說法不一致,以實際為準)

Re.sub的作用在於:使用給定的替換內容將匹配模式的子字符串(最左端並且非重疊的子字符串)替換掉

3、作為替換的組號

在2的例子中,隻是把一個字符串用其他的內容替換掉瞭。用replace這個字符串方法能輕松達到同樣的效果。而正則表達式允許以更靈活的方式進行搜索,同時它們也允許進行功能更強大的替換。

見證re.sub強大功能的最簡單方式就是在替換字符串中使用組號。在替換內容中以‘\\n’型式出現的任何轉義序列都會被模式中與組n匹配的字符串替換掉。

例如,假設要把‘*something*’用‘<em>someting</em>’替換掉,前者是在普通文本文檔(比如Email)中進行強調的常用方法,而後者則是相應的HTML代碼(用於網頁)

這裡把所有的* *含的字符串都替換掉瞭。剛開始我以為隻替換*world*。記一筆。

4、作為替換的函數

Re.sub函數可以將一個函數作為第二個參數(替換式)。函數會被匹配的對象調用,並且它的返回值會被插入到文本中。(但從例子2看來,是函數的唯一參數是被匹配的對象)

例子1:

test.txt內容:

結果:

例子2

(該例子在《python基礎教程》20章)

Sub方法不直接調用callback,而是返回一個新的函數,這個函數會被當成re.sub的替換函數來使用(這就是采用一個匹配的對象作為唯一參數的原因)

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。