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方法的語句。