美文网首页Pythoner集中营程序员Python精选
Python爬虫 --- 1.4 正则表达式:re库

Python爬虫 --- 1.4 正则表达式:re库

作者: 緣來 | 来源:发表于2018-08-19 03:16 被阅读18次

    想要学习爬虫,正则表达式是一定绕不过去的一关。正则表达式是我们在筛选文本数据是经常使用的利器。简单来说,一个正则表达式表达了符合这一规则的一系列的文本。

    从’通配符‘到正则表达式

    玩linux的同学在bash里一定经常用下面这一段代码:

    $ rm -rf /*.txt
    

    这里其实就是一个非常简单的删除当前目录下所有txt文件的命令,
    *号其实就一个 ‘通配符’。表示任何形式的数据。
    从这里我们就可以引出正则表达式的概念:

    正则表达式是用来简洁表达一组字符串的表达式,或者你可以将它理解为高级版的 通配符 表达式

    • 举个例子:
    import re
        
    test = 'python is the best language , pretty good !'
        
    p = re.findall('p+',test)
        
    print(p)
        
    '''
    OUT:
    ['p', 'p']
    '''
    

    正则表达式的语法:

    来一套言简意赅的图:

    来几个正则表达式的栗子:

    image

    常用的正则表达实例:

    注意一下 :

    $ 表示结束匹配

    image

    Python的re库的基本使用

    re库是Python内置的标准库,所以我们不用安装,

    直接import re就能直接使用。

    re库有着非常强大的功能!学好re库对我们爬虫的编写有极大的帮助!

    # re库 采用了 raw string 类型来表示正则表达式,
    
    # 例如:
    
    re1 = r'[1-9]\d{5}'
    
    # 这里的正则表示1一个1~9的数字和5个0~9的数字
    
    # 如:1000 就符合re标准
    

    使用raw string 的好处是 我们不用手动去再次写转义字符了。
    如果不用raw string 类型, 上面的正则表达式我们就得这么写:

    re1 = '[1-9]\\d{5}'
    

    re库的主要功能函数:

    我们着重讲一下 re.search这个函数:

    '''
    re.search(pattern, string, flags=0) 
    在一个字符串中搜索匹配正则表达式的第一个位置
    返回match对象
    ∙ pattern : 正则表达式的字符串或原生字符串表示 
    ∙ string : 待匹配字符串
    ∙ flags : 正则表达式使用时的控制标记
    ''' 
    str1 = 'hello , world ,life is short ,use Python .WHAT? '
        
    a = re.search(r'\w+',str1)
    print(a.group())    #  hello
    

    可以看到 我们成功找到了第一个 字符串 ”hello“

    • 常用的第三个参数 flags:
    re.IGNORECASE:忽略大小写,同 re.I。
    
    re.MULTILINE:多行模式,改变
    
    和$的行为,同
    re.M。
    
    re.DOTALL:点任意匹配模式,让’.’可以匹配包括’\n’在内的任字符,同 re.S。
    

    我们来使用一下控制标记试试:

    str1 = 'hello , world ,life is short ,use 
    b = re.search(r'w.+D',str1,re.I)
    print(b.group())
    #  world
    

    可以看到r'w.+D' 成功匹配到了world

    我们再来说另一个常用函数re.findall()

    '''
    re.findall(pattern, string, flags=0) 
    搜索字符串,以列表类型返回全部能匹配的子串
    ∙ pattern : 正则表达式的字符串或原生字符串表示 
    ∙ string : 待匹配字符串
    ∙ flags : 正则表达式使用时的控制标记
    '''
    
    c = re.findall(r'\w+',str1)
    print (c)
    #['hello', 'world', 'life', 'is', 'short', 'use', 'Python', 'WHAT']
    

    可以看到,我们找整个字符串中的所有单词,并且以列表类型反回了

    好了,剩下的函数用法基本和上面相似,都很简单的。用的时候稍微看一下参数就可以。我就不一一介绍了。

    re库的另一种用法

    在前面的例子中,我们都是在调用方法是传入一个原生字符串来表示re表达式,但是在多次搜索符合同一规则的数据时,这样做就会使得效率大大降低。相对应的我们有替代的做法。

    str2 = 'hssso'
    re1 = re.compile(r'h.{3}o')
    print(re1.findall(str1))
    print(re1.findall(str2))
    # ['hello']
    # ['hssso']
    

    这样,先把正则进行编译,在进行查找,就能大量节省时间,增加效率

    关于Match 对象:

    match对象是一次匹配的结果,他包含了很多的信息:

    '''
    match 对象的属性
        
    .string : 待匹配的文本 
    .re     : 匹配时使用的patter对象(正则表达式)
    .pos    : 正则表达式搜索文本的开始位置
    .endpos : 正则表达式搜索文本的结束位置   
    '''
    d = re.search(r'e.+d',str1)
    print(d.group()) # ello , world
    print (d.string) # hello , world ,life is short ,use Python .WHAT?
    print (d.re) # re.compile('e.+d')
    print (d.pos) # 0
    print (d.endpos) # 48
    

    好了,关于re库,我们暂时就先介绍到这里,

    只是介绍了一些浅显的用法,re库还有很多更加高级的用法,

    我会在以后的实战里慢慢展现。

    说到实战,写简单爬虫的基础咱们已经都掌握了。

    此文章同时同步到我的个人博客http://www.fkomm.cn/ 谢谢支持

    相关文章

      网友评论

        本文标题:Python爬虫 --- 1.4 正则表达式:re库

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