Python正则表达式文本替换

Python正则表达式文本替换

工具

re模块中的sub(parm1, parm2)函数

  • 参数1(parm1): 匹配的模式
  • 参数2(parm2): 替换的模式

示例

  1. 将日期格式从“11/28/2018”改为“2018-11-28
import re
text='今天是:11/28/2018'
print(re.sub(r'(\d+)/(\d+)/(\d+)',r'\3-\1-\2',text))  # \3表示第一个()中的文本
print(text)
# 如果打算用相同的模式执行重复替换,可以考虑先将 模式编译 以获得更好的性能。
import re
text='今天是:11/28/2018'
datepat=re.compile(r'(\d+)/(\d+)/(\d+)')  # 模式编译
print(text)
print(datepat.sub(r'\3-\1-\2',text))
今天是:11/28/2018
今天是:2018-11-28
  1. 将日期格式从 “今天是:11/28/2018” 改为 “今天是:2018 Nov 28"

    (对于更加复杂的情况,可以指定一个替换回调函数。)

import re
from calendar import month_abbr
text='今天是:11/28/2018'
datepat=re.compile(r'(\d+)/(\d+)/(\d+)')
 
# 替换回调函数。    
def change_date(m):
  mon_name=month_abbr[int(m.group(1))]  # 将 11 转换为 Nov
  return '{} {} {}'.format(m.group(3),mon_name,m.group(2))  # m.group(3) 匹配的第三个括号(\d+)

print(text)
print(datepat.sub(change_date,text))
今天是:11/28/2018
今天是:2018 Nov 28
  1. 将 python2 中的 print “XXX” 转换为 python3 中的 print(“XXX”)

    import re
    
    filename = "PSOProblems.py"  # 被替换的文件名
    
    with open(filename, 'r') as fp:
        text = fp.read()
    
    cp = re.compile(r'print ([^a-zA-Z0-9].*)\n')  # 模式编译
    
    
    # 替换回调函数。
    def change_date(m):
        return f'print({m.group(1)})\n'
    
    
    newText, n = cp.subn(change_date, text)
    
    with open(f"new_{filename}", 'w') as fp:
        fp.write(newText)
        print(f"完成{n}处替换!")
    
    完成37处替换!
    

在这里插入图片描述
在这里插入图片描述

其他

获取一共完成了多少次替换,可以使用 re.subn() 代替 re.sub(), 其 返回值 为 新文本次数

以上式为例:

import re
text='今天是:11/28/2018,昨天是11/27/2018'
datepat=re.compile(r'(\d+)/(\d+)/(\d+)')

new_text,n=datepat.subn(r'\3-\1-\2',text)

print(text)
print(new_text)
print(n)

参考Reference

https://www.runoob.com/python/python-reg-expressions.html
https://www.jb51.net/article/168336.htm

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值