这是我的第一篇博客!!嘻嘻嘻嘻,可能讲的不大好
我就最近遇到的问题(re正则表达式)之sub方法的参数讨论一下
废话不多说,开始进正题
先介绍一下这个方法
Python 的re模块提供了re.sub用于替换字符串中的匹配项。
语法:
re.sub(pattern, repl, string, count=0, flags=0)
参数:
前三个为必选参数,后两个为可选参数
实例
#!/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\d+)', double, s))
执行输出结果为:
A46G8HFD1134
解释:
首先要查找到,才替换
所以第一步就是查找:
sub查找到了,则对应返回的值是一个 match对象(包括search方法查找到了都是返回一个match对象,这是python规定的)
接着,double这个函数的参数接受到了这个对象
然后,可以通过调用组名来获取匹配到的内容【group组是可以命名的】
=============================================================================================
前方高能请耐心看完
(?P...) named group 带命名的组
(?P\d+)通过这样的一组方式可以将匹配到的组(也就是匹配到的内容【groups()】)命名为value【这里的例子是命名为value】
后面的‘\d+’则是正则表达式要匹配的内容,而前面的‘?P’则是对这个组名的声明
1. (?P=name)
##就是通过 (?P=name)的方式来引用【这个方法用在正则表达式里】
2. mateched.group(name)
##可以通过之前给group命的名,来获得匹配到的值
>> b.group('value')
'baidu'
3. matched.group(N) == matched.group(name)
# 此处,通过group的index,即group(1),group(2),...
# 也可以获得和之前通过名字name获得的group的值
# 通过名字或者索引号,两种方式都可以获得所需要的值,
# 但是通过名字,更加准确,不会出现,当group太多而index容易混淆的问题
4. \g in re.sub()
在re.sub()中,通过\g的方式,引用前面已经命名为name的group的值
>>> c
'baidu'
到这样基本就结束了吧哈哈哈哈应该是这样的
第一篇搞定......(CSND编辑起来有点不适应)
最后给大家一个参考链接( 如果还是不懂,可以查看更详细的解释)