dot:

'.'匹配任意的字符

'*'匹配任意多个(0到多个) 如图所示,

程序运行结果是abc,之所以没有匹配\n,是因为\n是换行符,它就代表这个字符串是两行的,而正则表达式是一行一行去匹配的。在re.match中遇到换行符就默认的认为字符串结束了,所以就不会去匹配下一行的内容,因此输出abc。

DOTALL:单单表示字符串,还可以表示换行符。这样的话,他就可以匹配整个字符串了。如上所示。

caret:中文意思就是拖字号,shift+6,

findall,就是找出所有的‘abc’,但是在匹配的时候,我们把它当成一个整体来匹配了,虽然它是两行,其中‘^’表示开始位置,此时如果我们加一个re.MULTILINE,此时这个‘^’就不单单表示字符串的开始了,而是表示行的开始,所以遇到换行符后又是一个新行。程序如下:

‘^’表示字符串的开始,‘$’表示字符串的结束,先看程序:

之所以匹配了abc2,没有匹配abc1,是因为在不加任何flag的情况下,‘$’表示的是一个字符串的结束,而不是行的结束,虽然里边有个换行符,但是没有任何的flag。如我我们加上re.MULTILINE,它就代表我们将这个字符串,当成多行来处理,那样的话,运行结果就不得而知了。如下:(\d表示的是数字)

从上可以看出,没有re.MULTILINE就代表字符串的结束,有re.MULTILINE就代表行的结束。

*:前一个匹配单元的匹配次数,匹配0到多个

+:前一个匹配单元的匹配次数,匹配1到多个

?:前一个匹配单元的匹配次数,匹配0到1个

那么 r’ab*’表示的就是匹配1个a,b可以是0个,也可以是多个,看程序:

这里补充一下,如果我们在后边再加上group,就可以将匹配结果打印出来了,如下:

如果我们将*换成+,那就匹配不上了, 那样就代表1个a,b最少是一个,看程序:

同理,把+换成?,也是可以匹配的。

接下来,在看一看贪婪和非贪婪(greedy/non-greedy)

先看程序:

.表示任意字符,*表示0到多个,而这样系统默认是贪婪模式,所以,H 1 > t I t l e < / H 1 全部都当成了任意字符,因为最后边有个>。其实匹配结果是这样的<H1>title</H1>,不知这样写能不能看懂,朋友们。

还有就是如果最后边没有那个‘>’,那么他就认为最后一个’>’是<H1>中的红体部分,运行结果我们也就知道了,如下:

如果此时,我们加一个?,他就变成非贪婪模式,看程序:

默认的是贪婪模式,要想非贪婪,就要加?

再给大家介绍一个,{m}表示匹配个数,看程序吧

通过上边这个程序,大家应该都看明白了吧,{m}代表的就是匹配的个数,如果个数不够m个,就会报错,如果个数大于m个,就会输出m个结果,多余的也不会输出。再扩展一下,看程序:

两个输出语句的区别就是一个有问号,一个没有问号,大家应该都明白,带问号的就是非贪婪模式,而{2,4}代表匹配2到4个,贪婪模式下,会匹配多的,也就是4个,非贪婪模式下,会匹配少的,也就是2个。

再看看转义字符’\’,看程序:

如果不加转义字符‘\’,$就会被系统认为是结束字符,加上之后,就会被当成一个符号来匹配。

最后,再写个[ ],它就代表集合的意思,就是可以匹配集合里边的任意一个,先看程序:

以上就是今天所学,总结的可能有些不是很细,部分内容可能理解有些不对,还请多多指出,大家共同学习,一起进步,谢谢。

python-day5爬虫基础之正则表达式2的更多相关文章

  1. 初识python 之 爬虫:使用正则表达式爬取“糗事百科 - 文字版”网页数据

    初识python 之 爬虫:使用正则表达式爬取"古诗文"网页数据 的兄弟篇. 详细代码如下: #!/user/bin env python # author:Simple-Sir ...

  2. 自学Python六 爬虫基础必不可少的正则

    要想做爬虫,不可避免的要用到正则表达式,如果是简单的字符串处理,类似于split,substring等等就足够了,可是涉及到比较复杂的匹配,当然是正则的天下,不过正则好像好烦人的样子,那么如何做呢,熟 ...

  3. Python BeautifulSoup4 爬虫基础、多线程学习

    针对 崔庆才老师 的 https://ssr1.scrape.center 的爬虫基础练习.Threading多线程库.Time库.json库.BeautifulSoup4 爬虫库.py基本语法

  4. python从爬虫基础到爬取网络小说实例

    一.爬虫基础 1.1 requests类 1.1.1 request的7个方法 requests.request() 实例化一个对象,拥有以下方法 requests.get(url, *args) r ...

  5. Python扫描器-爬虫基础

    0x1.基础框架原理 1.1.爬虫基础 爬虫程序主要原理就是模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或文件中 1.1.基础原理 1.发起HTTP请求 2 ...

  6. Python爬虫基础之正则表达式

    一.Python正则表达式的基本使用 Python 3 使用re模块可以实现大部分的正则表达式情况. 1.re.compile(pattern, flags=0) re.compile构建匹配规则并返 ...

  7. Python归纳 | 爬虫基础知识

    1. urllib模块库 Urllib是python内置的HTTP请求库,urllib标准库一共包含以下子包: urllib.error 由urllib.request引发的异常类 urllib.pa ...

  8. python开发模块基础:正则表达式

    一,正则表达式 1.字符组:[0-9][a-z][A-Z] 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示字符分为很多类,比如数字.字母.标点等等.假如你现在要求一个位置&q ...

  9. python网络爬虫之三re正则表达式模块

    """ re正则表达式,正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的 一些特定字符,及这些特定字符的组合,组成一个"规则字符串",然后用 ...

  10. 自学Python四 爬虫基础知识储备

    首先,推荐两个关于python爬虫不错的博客:Python爬虫入门教程专栏   和 Python爬虫学习系列教程 .写的都非常不错,我学习到了很多东西!在此,我就我看到的学到的进行总结一下! 爬虫就是 ...

随机推荐

  1. 手动搭建简单的vue项目

    创建项目根目录 切换到根目录下 , 并执行 npm init , 所有选项都默认即可. 安装 webpack webpack-cli vue vue-loader 添加项目结构         

  2. Linux运维命令笔记一

     1.Centos 无netstat 命令 yum -y install net-toolnetstat -tunp  2.Centos防火墙 systemctl stop firewalld.ser ...

  3. tensorflow--建立一个简单的小网络

    In [19]:           import tensorflow as tf import numpy as np # #简单的数据形网络 # #定义输入参数 # X=tf.constant( ...

  4. jquery 获取同级元素

    $(".userinfo-three:eq(0)").css({                 "width": winWidth * 300 / 1080, ...

  5. SqlServer体系结构

    1.SQL的ABC 特色 (1) Application 应用:理念是提供软件.硬件.服务在内的完整解决方案 (2) Box盒子: 传统部署方式.部署在企业内部. (3)Cloud: 私有云 .公有云 ...

  6. node.js爱心邮件

    一.用的软件是VsCode:下载地址:https://code.visualstudio.com/ 二.用的是node.js完成:下载地址:http://nodejs.cn/download/ 无脑下 ...

  7. 10几行代码,用python打造实时截图识别OCR

    你一定用过那种“OCR神器”,可以把图片中的文字提取出来,极大的提高工作效率. !   今天,我们就来做一款实时截图识别的小工具.顾名思义,运行程序时,可以实时的把你截出来的图片中的文字识别出来. 下 ...

  8. 直播课(1)如何通过数据劫持实现Vue(mvvm)框架

    19.6.28更新: 这篇博客比较完善:将每一部分都分装在单独的js文件中: 剖析Vue原理&实现双向绑定MVVM 半个月前看的直播课,现在才自己敲了一遍,罪过罪过 预览: 思路: 简单实现V ...

  9. lp_wizard 安装和使用

    lp_wizard 安装好之后,安装下面的步骤来和谐: 生成封装安装下面的步骤来做: 封装生成完了之后,注意后缀是 .pad 的需要放入自己的 pad 文件夹,.fsm 的放入 flash 文件夹,. ...

  10. [题解] Luogu P2000 拯救世界

    生成函数板子题...... 要写高精,还要NTT优化......异常dl 这个并不难想啊...... 一次召唤会涉及到\(10\)个因素,全部写出来,然后乘起来就得到了答案的生成函数,输出\(n\)次 ...