1. 程式人生 > 實用技巧 >python中re模組下的sub方法替換字串匹配值為函式

python中re模組下的sub方法替換字串匹配值為函式

Python 的 re 模組提供了re.sub用於替換字串中的匹配項,該方法除了能將字串中的匹配項替換成其他字串,還可以使用函式來進行替換。

 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 
 4 import re
 5 
 6 
 7 def double(matched):                               # 定義函式double
 8     print(matched)                                 # 測試語句,列印matched的值
 9     values = int(matched.group('
value')) # 將語句相應的數組裡面取到的值轉換成整數型別後賦值給變數values,因為原先的值是str型別,要轉換為整數後才能進行後面的乘法計算 10 print(values) # 測試語句,列印values的值 11 return str(values*2) # 將values的值乘以2後轉換為字串型別,如果不轉換成字串,在下面使用這個函式的替換字串裡面的值時候會報錯 12 13 14 s = '23G4HFD567' #
定義一個字串變數s 15 ss = re.search(r'(?P<name>\d+)', s) # 定義變數ss,值是在字串變數s中匹配數字,取匹配到的第一個值,\d匹配數字,即0-9,後面的+符號是指將連續的數字當成一個匹配值 16 print(ss) # 測試語句,列印變數ss的值 17 print(ss.group('name')) # 通過陣列名稱name打印出對應的值,陣列名稱name是在上面的?P<name>中定義的
18 print("下面是使用double函式替換字串中匹配的值") # 測試語句,列印一行字,方便檢視列印結果 19 print(re.sub('(?P<value>\d+)', double, s)) # 用double函式的值替換字串s中對應的匹配項,也就是將字串s中匹配到的所有數字乘以2

列印結果:

C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\python.exe C:/Users/Administrator/Desktop/mypython/test.py
<_sre.SRE_Match object; span=(0, 2), match='23'>
23
下面是使用double函式替換字串中匹配的值
<_sre.SRE_Match object; span=(0, 2), match='23'>
23
<_sre.SRE_Match object; span=(3, 4), match='4'>
4
<_sre.SRE_Match object; span=(7, 10), match='567'>
567
46G8HFD1134

程序已結束,退出程式碼0

從列印結果中可以看出,替換的值是double這個函式時,傳入double函式的引數matched的值是一個類似re.search方法的語句。