Python 正则表达式 检索和替换 re.sub 用法

语法:  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

猜你喜欢

转载自blog.csdn.net/zgcjaxj/article/details/106579557
今日推荐