python知识点(二):replace和re.sub运行效率比较

项目中需要替换字符串,起初使用万能的re.sub,但是在大数据量情况下发现运行速度很慢。
两种方法的原型:
str.replace(old, new[, max])
old -- 将被替换的子字符串。
new -- 新字符串,用于替换old子字符串。
max -- 可选字符串, 替换不超过 max 次

re.sub(pattern, repl, string, count=0, flags=0)
其中第二个参数repl是替换后的字符串或函数;
第四个参数指替换个数。默认为0,表示每个匹配项都替换。
另外正则表达式被编译成 `RegexObject` 实例被pattern调用

使用简单计数器方法测试如下:
    i = 0
    a = u'shjahkdlajklsh123hssklaui9jskja0uhsj89cahhc89an0'
    
    starttime = time.time()
        cc = re.compile(u'1')
    while i < 1000000:
        n = cc.sub(u'*',a)
        i += 1
    endtime = time.time()    
    print endtime - starttime


    i = 0
    starttime = time.time() 
    while i < 1000000:
        n = re.sub(u'1',u'*',a)
        i += 1
    endtime = time.time()    
    print endtime - starttime


    
    i = 0
    starttime = time.time() 
    while i < 1000000:
        n = a.replace(u'1',u'*')
        i += 1
    endtime = time.time()    
    print endtime - starttime

运行后的结果为:
6.78299999237
13.1659998894
3.27900004387

结论:很显然,使用replace对常规字符串替换,速度最快,对于re.sub来说用compile后的obj可以有效减少将近一半的时间。 如果你匹配一个固定的字符串或单个的字符类,并且你没有使用 re 的任何象 IGNORECASE 标志的功能,那么就没有必要使用正则表达式了。
解释:字符串有一些方法是对固定字符串进行操作的,它们通常快很多,因为它们都是一个个经过优化的 C 小循环,用以代替大的、更具通用性的正则表达式引擎。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值