开发者学堂课程【Python入门 2020年版:正则替换】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10450
正则替换
正则表达式作用是用来对字符串进行检索和替换
检索: Match、search、fulLmatch、finditer、findall
替换: sub
想把一个字符串中的数字全部替换成 x,该怎么做。
t = 'afo2dlkf23af245qou3095'
print(re.sub(r'\d', 'x' , t))
输出的结果为:
afoxdlkfxxafxxxqouxxxx
print(re.sub(r'\d+', 'x' , t))
输出的结果为:afoxdlkfxafxqoux
如果加一个”+“,连在一起的数字都只会变成一个x。
第一个参数是正则表达式
第二个参数是新字符或者一个函数
第三个参数是需要被替换的原来的字符串
这个时候我们试图将第二个参数变成一个函数会是什么情况。
p =
‘hello34good23’
def test():
pass
print(re.sub(r' ld' , test,p))
运行后会报错:
Test 需要0个位置参数但是给了1个。Test 函数是自动调用的。
def test(x):
print(x)
print(re.sub(r' ld' , test,p))
这个时候输出的结果就是:
<re.Match object; span=(5
,6), match='3 '>
<re.Match object; span=(6
,7), match='4'>
<re.Match object; span=(11
,12), match='2 '>
<re.Match object; span=(12
,13), match='3'>
Hellogood
sub 内部在调用 test 方法时,会把每一个匹配到的数据以 re.Match 的格式传参。
拿到 group(0)之后我们就可以进行下一步操作,我们尝试将这些数字乘2。
def test(x):
y = int(x.group(0))
y *= 2
return str(y)
print(re.sub(r' \d' , test,p))
这个时候我们在输出的结果就是:
hello68good46。
我们就可以把数字成功乘2了。注意返回的时候不能直接返回y的值,应该返回一个字符串,返回 str(y)。
如果我们想把两个数字变成一个整体,我们就需要用到+,就要变成:
print(re.sub(r' \d+' , test,p)),如果字符串变成 hello35good23,就
会输出 hello70good46,35和46被看成一个整体了。