美文网首页
学不会的正则表达式

学不会的正则表达式

作者: wu_sphinx | 来源:发表于2019-02-16 22:59 被阅读10次

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

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

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

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

    逐个看答案1字符串意义

    • .:匹配除换行符以外的任意字符
    • *:重复零次或更多次
    • (?<!google):匹配前面不是google的位置
    • $:匹配字符串的结束

    .*通常搭配一起用,表示除换行符以后的任意字符串,$作为字符串的结尾与字符串的开头^相对应,这几个都是单字符,很容易记住和运用,相比而言(?<!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的速度要快那么一点点,原因暂且不表,留待下回分解。

    以下文章值得长期收藏

    相关文章

      网友评论

          本文标题:学不会的正则表达式

          本文链接:https://www.haomeiwen.com/subject/ogzieqtx.html