一、re.sub函數概述
re.sub()函數是Python中正則表達式最常用的替換函數之一。該函數用於在字符串中搜索字符模式,並將匹配的部分替換為指定的字串。該函數的基本語法如下:
re.sub(pattern, repl, string, count=0, flags=0)
其中,pattern為正則表達式,repl為替換的字符串(也可以是一個函數),string為待匹配的字符串,count是指替換的個數,flags是匹配模式。count和flags是可選參數,沒有設置則為0。
二、正則表達式替換
re.sub()的簡單用法是將字符串中所有匹配正則表達式的字符串替換為指定字符串。下面是一個例子:
import re
str = "Hello, world. Python is fun."
new_str = re.sub(r'Python', 'Java', str)
print(new_str)
輸出結果為:
Hello, world. Java is fun.
該例子中,我們用正則表達式r’Python’在字符串中查找所有的Python,並替換為Java。
三、re.sub中使用函數替換
除了使用字符串作為替換,re.sub還支持使用函數作為替換。下面是一個例子:
import re
def double(matched):
value = int(matched.group('value'))
return str(value * 2)
str = 'I have 5 apple'
new_str = re.sub('(?P<value>\d+)', double, str)
print(new_str)
輸出結果為:
I have 10 apple
在該例子中,我們使用了正則表達式”(?P<value>\d+)”匹配數字,並將其傳遞給函數double()。函數double()將數字乘以2,最終替換為新的值。
四、re.sub中使用函數處理分組
使用re.sub函數時,我們還可以處理分組。下面是一個例子:
import re
def repl(match):
return match.group(2) + ' ' + match.group(1)
str = 'Doe, John'
new_str = re.sub(r'(\w+), (\w+)', repl, str)
print(new_str)
輸出結果為:
John Doe
在該例子中,我們使用了正則表達式”(\w+), (\w+)”匹配名字和姓氏。函數repl()將分組2修改為名字,分組1修改為姓氏,最終輸出’John Doe’。
五、re.sub處理嵌套分組
如果要對嵌套分組進行處理,我們需要使用遞歸。下面是一個例子:
import re
def repl(match):
str = match.group(1)
str = re.sub(r'\d+', lambda m: str(int(m.group(0))+1), str)
return str
s = 'a1b2c3'
new_str = re.sub(r'([a-z]+)(\d+)([a-z]+)', repl, s)
print(new_str)
輸出結果為:
a2b3c4
在該例子中,我們使用正則表達式”([a-z]+)(\d+)([a-z]+)”匹配字符串’a1b2c3’。如果匹配成功,我們將數字+1,並替換為新的值。如果匹配不成功,則什麼也不做。
六、re.sub的高級應用
實際工作中,re.sub()還有更多高級用法。例如,我們可以使用正則表達式替換HTML和XML標籤:
import re
html_str = '<p>Hello, <em>world</em>!</p>'
new_html_str = re.sub(r'<.+?>', '', html_str)
print(new_html_str)
輸出結果為:
Hello, world!
在該例子中,我們使用了正則表達式”<.+?>”匹配HTML標籤,然後使用空字符串將其替換。
七、總結
re.sub()是Python正則表達式替換中最常用的函數之一。除了基本的用法,它還支持使用函數、處理分組、遞歸、替換HTML和XML標籤等高級應用。通過掌握re.sub()功能,我們可以更高效地完成正則表達式的替換工作。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/312662.html