Python正则表达式(re)中sub方法参数为函数函数函数问题解决

这是我的第一篇博客!!嘻嘻嘻嘻,可能讲的不大好

我就最近遇到的问题(re正则表达式)之sub方法的参数讨论一下
 
废话不多说,开始进正题
 
先介绍一下这个方法
 
Python 的re模块提供了re.sub用于替换字符串中的匹配项。
语法:
re.sub(pattern, repl, string, count=0, flags=0)
参数:
  • pattern : 正则中的模式字符串。
  • repl : 替换的字符串,也可为一个函数。
  • string : 要被查找替换的原始字符串。
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
  • flags : 编译时用的匹配模式,数字形式。
       前三个为必选参数,后两个为可选参数
 

 

实例
#!/usr/bin/python3 import re
phone = "2004-959-559 # 这是一个电话号码"
# 删除注释
num = re.sub(r'#.*$', "", phone)
print ("电话号码 : ", num)

# 移除非数字的内容
num = re.sub(r'\D', "", phone)
print ("电话号码 : ", num)

以上实例执行结果如下:
电话号码 : 2004-959-559
电话号码 : 2004959559
 
相信到这里都没多大问题,到下面的时候要好好琢磨琢磨
 
若repl为一个函数的话(待我一一解释,看下面)-----也就是替代的位置为一个函数的时候
 
以下实例中将字符串中的匹配的数字乘于 2:(这里用的是菜鸟的题)

 

实例
#!/usr/bin/python
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))

执行输出结果为:
A46G8HFD1134
 

解释:

首先要查找到,才替换

所以第一步就是查找:

sub查找到了,则对应返回的值是一个 match对象(包括search方法查找到了都是返回一个match对象,这是python规定的)
接着,double这个函数的参数接受到了这个对象
然后,可以通过调用组名来获取匹配到的内容【group组是可以命名的】
 
=============================================================================================
前方高能请耐心看完
 
(?P<name>...)  named group 带命名的组
(?P<value>\d+)通过这样的一组方式可以将匹配到的组(也就是匹配到的内容【groups()】)命名为value【这里的例子是命名为value】
后面的‘\d+’则是正则表达式要匹配的内容,而前面的‘?P<name>’则是对这个组名的声明
 
1. (?P=name)
##就是通过 (?P=name)的方式来引用【这个方法用在正则表达式里】
>>> url = '<a>www.baidu.com<a>baidu'
>>> re.search(r'<a>www.(?P<value>.+?).com<a>(?P=value)',url)
<re.Match object; span=(0, 24), match='<a>www.baidu.com<a>baidu'>
 
 
2. mateched.group(name)
##可以通过之前给group命的名,来获得匹配到的值
>>> b = re.search(r'<a>www.(?P<value>.+?).com<a>(?P=value)',url)
>> b.group('value')
'baidu'
 
 
3. matched.group(N) == matched.group(name)
    # 此处,通过group的index,即group(1),group(2),...
    # 也可以获得和之前通过名字name获得的group的值
    # 通过名字或者索引号,两种方式都可以获得所需要的值,
    # 但是通过名字,更加准确,不会出现,当group太多而index容易混淆的问题
 
 
4. \g<name> in re.sub()
在re.sub()中,通过\g<name>的方式,引用前面已经命名为name的group的值
>>> c = re.sub(r'<a>www.(?P<value>.+?).com<a>(?P=value)','\g<value>',url)
>>> c
'baidu'
 
到这样基本就结束了吧哈哈哈哈应该是这样的
第一篇搞定......(CSND编辑起来有点不适应)
最后给大家一个参考链接( 如果还是不懂,可以查看更详细的解释
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值