学不会的正则表达式

2019-02-16  本文已影响10人  wu_sphinx

印象中知道正则表达式很有用,需要用时上网查资料(答案)照搬,感觉好像学会了,下次需要用到时似乎又忘记了,仿佛陷入了一个迷之自信的怪圈,最后结果就是感觉好像会,但其实不会!

这不,今天又遇到了,我只是想需要一个not endswith str这样的正则表达式,一向快糙猛的风格又不得法,拿来主义习惯了,最近上谷歌不太畅通,感觉不会编程了一样,难道是不幸中了传说中面向搜索引擎编程的毒?

还是以解决问题为重。
问题描述?
匹配不是以google作为结尾的字符串
对应正则表达式如下(可在在线正则表达式测试上验证):

  1. .*(?<!google)$
  2. .*(?!google)$

逐个看答案1字符串意义

.*通常搭配一起用,表示除换行符以后的任意字符串,$作为字符串的结尾与字符串的开头^相对应,这几个都是单字符,很容易记住和运用,相比而言(?<!exp)就要稍微“复杂“一点点了,无它,多用几次也就记住了。

比较一下二者的执行速度

import re 
import time 

def get_re_time(pattern, str, count=1000000):
    st = time.time()
    for _ in range(count):
        re.match(pattern, str)
    return time.time()-st

if __name__ == "__main__":
    for _ in range(10):
        print('(?<!exp) seconds is:{} (?<!exp) is seconds:{}'.format(get_re_time('.*(?<!google)$', 'adsfadgoogle'), get_re_time('.*(?!google)$', 'adsfadgoogle')))

结果

(?<!exp) seconds is:0.9892270565032959 (?<!exp) is seconds:0.8230881690979004
(?<!exp) seconds is:0.9732108116149902 (?<!exp) is seconds:0.8235759735107422
(?<!exp) seconds is:0.9880321025848389 (?<!exp) is seconds:0.8225719928741455
(?<!exp) seconds is:0.9598960876464844 (?<!exp) is seconds:0.824509859085083
(?<!exp) seconds is:0.954564094543457 (?<!exp) is seconds:0.8188457489013672
(?<!exp) seconds is:0.958960771560669 (?<!exp) is seconds:0.8349621295928955
(?<!exp) seconds is:1.1263601779937744 (?<!exp) is seconds:0.8461761474609375
(?<!exp) seconds is:0.9537780284881592 (?<!exp) is seconds:0.8274679183959961
(?<!exp) seconds is:1.001042127609253 (?<!exp) is seconds:0.8258669376373291
(?<!exp) seconds is:0.9560801982879639 (?<!exp) is seconds:0.8229031562805176

单以此用例来看,答案2的速度要快那么一点点,原因暂且不表,留待下回分解。

以下文章值得长期收藏

上一篇 下一篇

猜你喜欢

热点阅读