python中re模組下的sub方法替換字串匹配值為函式
阿新 • • 發佈:2021-01-12
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方法的語句。