元字符表

符号 说明 示例
. 表示任意字符 '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))

②边界限制元字符

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

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

运行结果

③限定符

常见的限定符包括*、?、+、{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))

运行结果:

④模式选择符

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

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

运行结果:

⑤模式选择符

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

#-*- 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出现一次

运行结果:

【Python3 爬虫】08_正则表达式(元字符与语法)的更多相关文章

  1. [Python] 网络爬虫和正则表达式学习总结

    以前在学校做科研都是直接利用网上共享的一些数据,就像我们经常说的dataset.beachmark等等.但是,对于实际的工业需求来说,爬取网络的数据是必须的并且是首要的.最近在国内一家互联网公司实习, ...

  2. python 3.x 爬虫基础---正则表达式

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---Requer ...

  3. javascript中正则表达式的基础语法

    × 目录 [1]定义 [2]特点 [3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性 前面的话 正则表达式在人们的印象中可能是一堆无 ...

  4. php正则表达式的基本语法

    简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例 如,vi编辑器,Perl或PHP脚本语言,以及awk或sed sh ...

  5. php正则表达式入门-常用语法格式

    php正则表达式入门-常用语法格式 原文地址:http://www.jbxue.com/article/24467.html 分享下php正则表达式中的一些常用语法格式,用于匹配字母.数字等,个人感觉 ...

  6. Sed 命令详解 正则表达式元字符

    1.简介 sed是非交互式的编辑器.它不会修改文件,除非使用shell重定向来保存结果.默认情况下,所有的输出行都被打印到屏幕上. sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下 ...

  7. 玩转python爬虫之正则表达式

    玩转python爬虫之正则表达式 这篇文章主要介绍了python爬虫的正则表达式,正则表达式在Python爬虫是必不可少的神兵利器,本文整理了Python中的正则表达式的相关内容,感兴趣的小伙伴们可以 ...

  8. 笔趣看小说Python3爬虫抓取

    笔趣看小说Python3爬虫抓取 获取HTML信息 解析HTML信息 整合代码 获取HTML信息 # -*- coding:UTF-8 -*- import requests if __name__ ...

  9. Python3爬虫系列:理论+实验+爬取妹子图实战

    Github: https://github.com/wangy8961/python3-concurrency-pics-02 ,欢迎star 爬虫系列: (1) 理论 Python3爬虫系列01 ...

  10. python3爬虫中文乱码之请求头‘Accept-Encoding’:br 的问题

    当用python3做爬虫的时候,一些网站为了防爬虫会设置一些检查机制,这时我们就需要添加请求头,伪装成浏览器正常访问. header的内容在浏览器的开发者工具中便可看到,将这些信息添加到我们的爬虫代码 ...

随机推荐

  1. hdu 1498(最小点覆盖集)

    50 years, 50 colors Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  2. (十五)mysql中间件MyCAT实现

    1)拓扑如下和实现目标 写操作:都在master 读操作:在slave1上 当master1挂了,写操作自动切换到master2上 当master2挂了,写操作自动切换到master1上 2)Myca ...

  3. [thinkphp] 是如何输出一个页面的

    表面上看,TP输出一个页面很简单:$this->display(); 实际上是怎么回事呢?$this->display(); 这个display()方法是定义在ThinkPHP/Libra ...

  4. win7 安全模式开启声音

    下载运行这个reg文件 http://files.cnblogs.com/files/bushe/Activate_Sound_in_SafeMode.rar

  5. CSS 从入门到放弃系列:CSS的选择器和优先级

    CSS的选择器和优先级 CSS的N种选择器 !important 其实这个玩意不算什么选择器,放在这只是为了突出这个选择器优先级或者说权重的从高到低而已.. 内联方式(行间样式) <div st ...

  6. Python3 字典(map)

    ayout: post title: Python3 字典(map) author: "luowentaoaa" catalog: true tags: mathjax: true ...

  7. [CTSC2017]吉夫特(Lucas定理,DP)

    送70分,预处理组合数是否为偶数即可. 剩下的数据,根据Lucas定理的推论可得当且仅当n&m=n的时候,C(n,m)为奇数.这样就可以直接DP了,对于每个数,考虑它对后面的数的影响即可,直接 ...

  8. HDOJ 4812 D Tree

    Discription There is a skyscraping tree standing on the playground of Nanjing University of Science ...

  9. POJ 1236 Network of Schools(SCC)

    [题目链接] http://poj.org/problem?id=1236 [题目大意] 给出一张有向图,问需要从几个起点出发才能遍历全图, 如果要求从任何一个点出发都能遍历全图,那么最少需要增加几条 ...

  10. Awesome图标 | 如何在某些编辑软件中使用Font Awesome字体图标

    文章目录 Font Awesome 字体图标 在某些编辑软件中使用 Font Awesome 字体图标 Font Awesome 为您提供可缩放矢量图标,它可以被定制大小.颜色.阴影以及任何可以用 C ...