zoukankan      html  css  js  c++  java
  • 【Python3 爬虫】08_正则表达式(元字符与语法)

    元字符表

    符号说明示例
    .表示任意字符'abc'  >>>'a.c'   >>>结果为:'abc'
    ^表示字符开头'abc'  >>>'^abc'  >>>结果为:'abc'
    $

    表示字符串结尾

    'abc'  >>>'abc$'  >>>结果为:'abc'
    *, +, ?

    '*'表示匹配前一个字符重复 0 次到无限次,'+'表示匹配前一个字符重复 1次到无限次,'?'表示匹配前一个字符重复 0 次到1次

    'abcccd'  >>>'abc*' >>>结果为:'abccc'

    'abcccd' >>>'abc+'  >>>结果为:'abccc'

    'abcccd' >>>'abc?'  >>>结果为:'abc'

    *?, +?, ??前面的*,+,?等都是贪婪匹配,也就是尽可能多匹配,后面加?号使其变成惰性匹配即非贪婪匹配

    'abc'  >>>'abc*?' >>>结果为:'ab'

    'abc'  >>>'abc??' >>>结果为:'ab'

    'abc'  >>>'abc+?' >>>结果为:'abc'

    {m}

    匹配前一个字符 m 次

    'abcccd' >>>'abc{3}d'  >>>结果为:'abcccd'
    {m,n}匹配前一个字符 m 到 n 次'abcccd'  >>> 'abc{2,3}d' >>>结果为:'abcccd'
    {m,n}?匹配前一个字符 m 到 n 次,并且取尽可能少的情况 'abccc'  >>> 'abc{2,3}?' >>>结果为:'abcc'
    对特殊字符进行转义,或者是指定特殊序列'a.c' >>>'a.c' >>> 结果为: 'a.c'
    [] 表示一个字符集,所有特殊字符在其都失去特殊意义,只有: ^  -  ]     含有特殊含义'abcd' >>>'a[bc]' >>>结果为:'ab'
    |或者,只匹配其中一个表达式 ,如果|没有被包括在()中,则它的范围是整个正则表达式

    'abcd' >>>'abc|acd' >>>结果为:'abc'

    ( … )被括起来的表达式作为一个分组. findall 在有组的情况下只显示组的内容'a123d' >>>'a(123)d' >>>结果为:'123'
    (?#...)

    注释,忽略括号内的内容  特殊构建不作为分组

    'abc123' >>>'abc(?#fasd)123' >>>结果为:'abc123'
    (?= … )表达式’…’之前的字符串,特殊构建不作为分组在字符串’ pythonretest ’中 (?=test) 会匹配’ pythonre ’
    (?!...)

    后面不跟表达式’…’的字符串,特殊构建不作为分组

    如果’ pythonre ’后面不是字符串’ test ’,那么 (?!test) 会匹配’ pythonre ’
    (?<= … )跟在表达式’…’后面的字符串符合括号之后的正则表达式,特殊构建不作为分组正则表达式’ (?<=abc)def ’会在’ abcdef ’中匹配’ def ’
    (?:)取消优先打印分组的内容

    'abc' >>>'(?:a)(b)' >>>结果为'[b]'

    ?P<>指定Key'abc' >>>'(?P<n1>a)>>>结果为:groupdict{n1:a}

    元字符分类

    • 任意匹配元字符
    • 边界限制元字符
    • 限定符
    • 模式选择符
    • 模式单元

    ①任意匹配元字符

    #-*- codingn:utf-8 -*-
    import re
    pattern = 'abc'
    print("结果:%s"%re.search('a.c',pattern))

    image

    ②边界限制元字符

    边界限制符,’^’匹配字符串的开始,使用’$’匹配字符串的结束

    #-*- codingn:utf-8 -*-
    import re
    pattern1 = 'Hello'
    print("结果1:%s"%re.search('^H',pattern1))
    print("结果2:%s"%re.search('o$',pattern1))

    运行结果

    image

    ③限定符

    常见的限定符包括*、?、+、{n}、{n,}、{n,m}

    #-*- codingn:utf-8 -*-
    import re
    pattern1 = 'mnjsassssh'
    print("结果1:%s"%re.search('as{2}',pattern1))
    print("结果2:%s"%re.search('as{3}',pattern1))
    print("结果3:%s"%re.search('as{2,}',pattern1))

    运行结果:

    image

    ④模式选择符

    模式选择符’|’
    使用模式选择符,可以设置多个模式,匹配时,可以从中选择任意一个模式匹配。

    #-*- codingn:utf-8 -*-
    import re
    pattern1 = 'mnjsassssh'
    print("结果1:%s"%re.search('mn|ok',pattern1))

    运行结果:

    image

    ⑤模式选择符

    模式单元符(),可以使用’()’将一些原子组合成一个大原子使用,小括号括起来的部分会被当做一个整体去使用

    #-*- codingn:utf-8 -*-
    import re
    pattern1 = 'mnjsassssh'
    print("结果1:%s"%re.search('(ss){1,}',pattern1)) #ss至少出现一次
    print("结果2:%s"%re.search('(ss){1}',pattern1)) #ss出现一次
    print("结果3:%s"%re.search('as{1,}',pattern1)) #a字母后的s至少出现一次
    print("结果4:%s"%re.search('as{1}',pattern1)) #a字母后的s出现一次

    运行结果:

    image

  • 相关阅读:
    tomcat 配置文件下载目录
    AeroSpike 资料
    NodeManager起不来
    添加Microsoft SQL JDBC driver 到 Maven
    广告投放网站集合
    eMarketer:DMP帮广告主搞定大数据处理问题
    HUE 忘记密码
    Git客户端图文详解如何安装配置GitHub操作流程攻略
    httprunner3.x 测试用例-teststeps-RunTestCase
    httprunner3.x 测试用例teststeps-RunRequest
  • 原文地址:https://www.cnblogs.com/OliverQin/p/8657054.html
Copyright © 2011-2022 走看看