re.sub的使用

re.sub的使用,记录一下

使用场景

当字符串自带的方法str.replace()满足不了使用时,就可以选择使用re.sub来进行复杂的替换。

使用方法

re.sub('需要被替换掉的字符串的正则表达式','定义替换规则的方法','源字符串')

例:获取的字符串中,特殊字符被替换成html转义符,但在输出时又想看到它的原始符号,如字符串'dasdasdasd’193123124sdasd34—dasdawww’',根据html的转义规则,其应该是dasdasdasd'193123124sdasd34_dasdawww',即’需要转为'—转为_。代码如下:

import re

special_cha = {"’":"'", "—": "_"}

def func_test(matched):
    return special_cha[matched.group('test')]

def func_test2(matched):
    num = int(matched.group('num'))
    print(num) #输出4
    return str(num * 2)

string = 'dasdasdasd’193123124sdasd34—dasdawww’'

srting2 = re.sub('(?P<test>&[a-z]{5};)', func_test, string)
print(srting2)# 输出1
print(re.sub('(?P<num>\d{1})', func_test2, srting2)) # 输出2
print(re.sub('(?P<num>\d+)', func_test2, srting2)) # 输出3

此代码输出为:

dasdasdasd'193123124sdasd34_dasdawww' # 为了方便区分输出,写文档时添加了这些注释说明。这是输出1
1 # 这是输出4(输出2时)
9
3
1
2
3
1
2
4
3
4 # 这是输出4(输出2时)
dasdasdasd'2186246248sdasd68_dasdawww' # 这是输出2
193123124 # 这是输出4(输出3时)
34 # 这是输出4(输出3时)
dasdasdasd'386246248sdasd68_dasdawww' # 这是输出3

在这个代码中, re.sub('(?P<test>&[a-z]{5};)', func_test, string),正则表达式(?P<test>&[a-z]{5};)代表的意思是匹配&开头中间5个字母,以;结尾的7个长度的连续字符串,?P<test>是定义了组名,即满足&[a-z]{5}规则的字符串都属于这一组,func_test即是处理这一组中的字符串的方法。

func_test是将匹配到的字符串根据special_cha字典转义成对应的字符,func_test2是将匹配到的数字乘以2,在处理数字是需要注意,因为\d{1}和\d+匹配到的数字是不一样的,所以在乘以2时得到的结果也不一致,见输出2和输出3。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值