元字符表

符号 说明 示例
. 表示任意字符 '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. java 编码分析

    三.源码分析:    更改字符串编码的步骤为:    1.调用String的getByte方法对字符串进行解码,得到字符串的字节数组(字节数组不携带任何有关编码格式的信息,只有字符才有编码格式)    ...

  2. Cookie 的运用

    Cookie的原理是通过Set-Cookie响应头和Cookie请求头将会话中产生的数据保存在客户端.--- 底层(SUN公司已经给我们提供了一套API) Cookie是将需要保存的数据保存在了客户端 ...

  3. [thinkphp] 公共头部底部如何传递数据

    分组底下有一个公共模板文件夹 Modules/Index/Tpl/public/ 如何传递数据给模板呢? 在  入口文件/Lib/Action/  中创建类CommonAction.class.php ...

  4. 原生js编写设为首页兼容ie、火狐和谷歌

    // JavaScript Document // 加入收藏 <a onclick="AddFavorite(window.location,document.title)" ...

  5. POJ 1703 Find them, Catch them【种类/带权并查集+判断两元素是否在同一集合/不同集合/无法确定+类似食物链】

      The police office in Tadu City decides to say ends to the chaos, as launch actions to root up the ...

  6. Problem D: 乌龟棋【四维dp】

    Problem D: 乌龟棋 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 24  Solved: 15[Submit][Status][Web Boa ...

  7. HDU 2044 一只小蜜蜂(递归)

    一只小蜜蜂... Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  8. HDU 2549 壮志难酬(字符串,处理小数点)

    /* 给你一个小数x,让你算出小数点后第n位是什么,(1 <= n <= 6) Input 首先输入一个t,表示有t组数据,跟着t行: 每行输入一个小数(输入数据保证一定是a.b的形式,为 ...

  9. NOIP2014飞扬的小鸟

    长为n,高为m的二维平面,其中有k个管道(忽略管道的宽度)小鸟始终在游戏界面内移动.从最左边任意高度位置出发,到达游戏界面最右边,游戏完成每个单位时间沿横坐标方向右移距离为1,竖直移动的距离由玩家控制 ...

  10. Oracle的锁

    Oracle数据库中的锁机制 数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数 ...