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

  • 相关阅读:
    《ASP.NET Core跨平台开发从入门到实战》Web API自定义格式化protobuf
    .NET Core中文分词组件jieba.NET Core
    .NET Core 2.0及.NET Standard 2.0
    Visual Studio 2017 通过SSH 调试Linux 上.NET Core
    Visual Studio 2017 ASP.NET Core开发
    Visual Studio 2017正式版离线安装及介绍
    在.NET Core 上运行的 WordPress
    IT人员如何开好站立会议
    puppeteer(二)操作实例——新Web自动化工具更轻巧更简单
    puppeteer(一)环境搭建——新Web自动化工具(同selenium)
  • 原文地址:https://www.cnblogs.com/OliverQin/p/8657054.html
Copyright © 2011-2022 走看看