python 正则表达式 sub_Python 正则表达式 (re.sub 正则替换)

一.re.sub 正则替换

Step 1. re.sub查找替换

re.sub参数:

pattern

repl

string

count=0 : 默认0,作用是无限替换下去

flags=0

#例子1

说明:找到Cream然后进行替换成Java

$ vim o8.py

import re

lanuage = 'CreamSandwichC#Python'

r = re.sub('Cream', 'Java', lanuage)

print(r)

#执行结果

$ python2.7 o8.py

JavaSandwichC#Python

#例子2

说明:re.sub count=0 将查找替换无限替换下去(若lanuage变量中有多个Cream将全部替换成Java)

import re

lanuage = 'CreamSandwichC#PythonCream'

r = re.sub('Cream', 'Java', lanuage, 0)

print(r)

#执行结果

$ python2.7 o8.py

JavaSandwichC#PythonJava

#例子3

说明:将count设置为1,将替换一个Cream,剩下的Cream不会被替换

import re

lanuage = 'CreamSandwichC#PythonCream'

r = re.sub('Cream', 'Java', lanuage, 1)

print(r)

#执行结果

$ python2.7 o8.py

JavaSandwichC#PythonCream

Step 2.replace 查找替换

replace 是re.sub的简化版,常规的替换可以使用replace,要实现一些超强的功能还是使用re.sub

import re

lanuage = 'CreamSandwichC#PythonCream'

lanuage = lanuage.replace('C#', 'Java')

print(lanuage)

#执行结果

$ python2.7 o8.py

CreamSandwichJavaPythonCream

Step3.1 re.sub 第二参数可以是函数

convert 函数是如何被re.sub所调用的? 调用流程又是什么?

如果把函数作为re.sub第二个参数传到参数列表之后运行流程是这样的:当正则表达式匹配到一个结果的时,会把匹配结果传到convert函数里来,所以说value就是正则表达所匹配的结果,也就是说convert 返回的结果将会替换C#.

为什么返回的结果C#消失了,因为什么都没有返回,C#被一个空的字符给替代了.

import re

lanuage = 'PythonC#JavaC#PHPC#'

def convert(value):

pass

r = re.sub('C#', convert, lanuage)

print(r)

#执行结果

$ python2.7 o9.py

PythonJavaPHP

Step3.2 re.sub 第二参数可以是函数

调用value.group方法拿到C#,matched表示匹配的字符串使用group得到matched

可以看到执行结果C#被动态的更改~~

import re

lanuage = 'PythonC#JavaC#PHPC#'

def convert(value):

matched = value.group()

return '~~'+ matched +'~~'

r = re.sub('C#', convert, lanuage)

print(r)

#执行结果

$ python2.7 o9.py

Python~~C#~~Java~~C#~~PHP~~C#~~

二.把函数作为参数传递

Step 1.实现字符串的替换

替换规则:找出字符串里的所有数字,凡是数字大于等于6的数字,统一替换成8,而小于6的数字,统一替换成0

import re

s = 'A8C37211D86'

def convert(value):

matched = value.group()

if int(matched) >= 6:

return '9'

else:

return '0'

r = re.sub('\d', convert, s)

print(r)

#执行结果

$ python2.7 o10.py

A9C09000D99

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值