美文网首页
爬虫学习笔记(3): Python正则表达式Re库

爬虫学习笔记(3): Python正则表达式Re库

作者: TOP生物信息 | 来源:发表于2019-10-14 16:28 被阅读0次

    基础部分

    重要性不言而喻。最开始学Perl的时候,对正则表达式做过一些总结,正则表达式笔记(三),共3篇。在这里对于基础部分只简单写一点。

    操作符 说明
    () 分组标记,内部只能使用|操作符
    \d 数字,等价于[0-9]
    \w 单词字符,等价于[A-Za-z0-9_]

    常用正则表达式

    式子 含义
    [1-9]\d{5} 中国境内邮政编码
    \u4e00-\u9fa5 匹配中文字符
    \d{3}-\d{8}|\d{4}-\d{7} 国内电话号码
    \d+.\d+.\d+.\d IP地址

    IP地址精确写法
    IP地址分4段,每段0-255
    \d+.\d+.\d+.\d
    \d{1,3}.\d{1,3}.\d{1,3}.\d
    (([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])

    Re库

    Python的标准库
    调用:import re
    正则表达式表示:r'[1-9]\d{5}',前面有个r,这是原生字符串表达形式
    raw string类型是不包含转义符的字符串,比string类型使用起来简洁,因为不用加反斜杠(R中正则表达式使用起来就需要加很多反斜杠)

    Re库主要功能函数

    re.search()
    re.search(pattern, string, flags=0)
    在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
    
    flags:控制标记
    re.I    忽略正则表达式的大小写,[A-Z]能够匹配小写字符
    re.M    正则表达式中的^操作符将匹配string的每一行开始部分
    re.S    正则表达式中的.操作符将匹配包括换行符在内的所有字符
    
    >>> match=re.search(r'[1-9]\d{5}',"北京 100871")
    >>> match
    <re.Match object; span=(3, 9), match='100871'>
    >>> match.group(0)
    '100871'
    

    调用方法之前,最好对返回对象做一个判断

    re.match()
    re.match(pattern,string,flags=0)
    从一个字符串的开始位置起匹配正则表达式,返回match对象
    
    参数同上
    
    >>> match=re.match(r'[1-9]\d{5}',"100871 北京")
    >>> match.group(0)
    '100871'
    >>> match
    <re.Match object; span=(0, 6), match='100871'>
    
    re.findall()
    三个参数
    
    >>> ls=re.findall("ATG","AGCTACGTACGATCGATCGATATGCGCATCGACATCGAATGCGATCAGCTAGCATG")
    >>> ls
    ['ATG', 'ATG', 'ATG']
    
    re.split()
    将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
    
    多了一个参数
    maxsplit: 最大分隔数,剩余部分作为最后一个元素输出(相当于是匹配次数)
    
    >>> re.split("T","ATGACAGTGAC")
    ['A', 'GACAG', 'GAC']
    >>> re.split("T","ATGACAGTGAC",maxsplit=1)
    ['A', 'GACAGTGAC']
    
    re.finditer()
    搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素都是match对象
    
    三个参数
    
    import re
    str="ATGATTGATTTGATTTTG"
    for m in re.finditer(r"AT{1,4}",str):
        if m:
            print(m.group(0))
    
    re.sub()
    re.sub(pattern, repl, string, count=0, flags=0)
    在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
    
    repl: 替换匹配字符串的字符串
    count: 匹配的最大替换次数,虽然默认值是0,但表示全部替换
    
    >>> str
    'ATGATTGATTTGATTTTG'
    >>> re.sub(r"AT{1,4}","N",str)
    'NGNGNGNG'
    
    两种用法

    上面几个例子都是函数式用法,适用于一次性操作。还可以用面向对象的用法,编译后可以进行多次操作。

    re.compile(pattern, flags=0)
    pattern: 正则表达式的字符串或原生字符串表示
    flags: 正则表达式使用时的控制标记
    
    >>> pat=re.compile(r"AT{1,4}")
    >>> pat #一个正则表达式对象
    re.compile('AT{1,4}')
    >>> pat.findall(str)
    ['AT', 'ATT', 'ATTT', 'ATTTT']
    

    Re库的match对象

    >>> m=re.search(r'AT{1,4}',str)
    >>> m.group(0)
    'AT'
    >>> type(m)
    <class 're.Match'>
    
    match对象的属性(关于pattern和string)
    >>> m.pos
    0
    >>> m.endpos
    18
    >>> m.string
    'ATGATTGATTTGATTTTG'
    >>> m.re
    re.compile('AT{1,4}')
    
    match对象的方法(关于匹配结果)
    >>> m.group(0)
    'AT'
    >>> m.start()
    0
    >>> m.end()
    2
    >>> m.span() #返回元组类型
    (0, 2)
    

    贪婪匹配与最小匹配

    >>> str
    'ATGATTGATTTGATTTTG'
    >>> m=re.search(r'A.*G',str)
    >>> m.group(0)
    'ATGATTGATTTGATTTTG'
    

    Re库默认采用贪婪匹配,输出最长符合要求的字符串

    >>> m=re.search(r'A.*?G',str)
    >>> m.group(0)
    'ATG'
    

    *, +, ?, {min,max}后面加上?可以返回最小匹配

    相关文章

      网友评论

          本文标题:爬虫学习笔记(3): Python正则表达式Re库

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