语法: re.sub(pattern, repl, string, count=0, flags=0)
pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
需要注意:re.sub并不改变原始字符串,替换后的新字符串通过返回值来表达,可以通过 string = re.sub(pattern, repl, string)的形式将原字符串替换。
参考 https://www.runoob.com/python/python-reg-expressions.html
repl为 字符串时,有如下实例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
phone = "2004-959-559 # 这是一个国外电话号码"
# 删除字符串中的 Python注释 .* 表示匹配任意字符/字符串 $表示匹配phone的结束位置
num = re.sub(r'#.*$', "", phone)
print "电话号码是: ", num
# 删除非数字(-)的字符串 \D 匹配非数字
num = re.sub(r'\D', "", phone)
print "电话号码是 : ", num
实例执行结果如下:
电话号码是: 2004-959-559
电话号码是 : 2004959559
当repl为 函数时,有如下实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
# 将匹配的数字乘以 2
def double(matched):
value = int(matched.group('value'))
return str(value * 2)
s = 'A23G4HFD567'
print(re.sub( '(?P<value>\d+)', double, s))
其中 (?P<value>...) 是带命名的组,value是自己起的一个名字。'(?P<value>)' 是固定写法,后面的 \d+是这个匹配组()中 要匹配的内容。当然,也可以有多个匹配组,或非匹配组的匹配内容。
\d+ 匹配的是任意数字,所以匹配了字符串中的 23 、4和567
执行输出结果为: A46G8HFD1134
增强实例
下面的正则pattern包含两个匹配组、还有非匹配组的匹配内容
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
# 将匹配的数字乘以 2
def double(matched):
value = int(matched.group('value_1'))
print "match value_2 : " + matched.group('value_2')
return str(value * 2)
s = 'HELL23G4HFD567'
print(re.sub( 'HELL(?P<value_1>\d+).*(?P<value_2>[EH])' , double, s))
执行输出结果为:
match value_2 : H
46FD567