Python爬虫之正则表达式

2023-11-06

正则表达式

正则表达式就是规则表达式,在接触爬虫前,正则表达式就是用来过滤的。接触爬虫后发现真的就是过滤用的hhh。正则表达式在爬虫中的作用就是过滤出想要的字符,然后获取,如果不用正则表达式,那么就会将网页中大量信息全部爬出,造成大量内存浪费,亦不是我们最初想要爬取某些东西的初衷。

正则表达式原理

通过正则表达式我们可以实现

  1. 给定的字符串是否符合正则表达式的过滤逻辑(匹配

  2. 通过正则表达式,从文本字符串中获取我们想要的特定部分(过滤

语法介绍

正则表达式室友普通字符(a-z)以及特殊字符(“元字符”)组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。

真个则表达式的组件可以是单个字符、字符合集、字符范围、字符间的选择或者所有这些组件的任意组合。正则表达式中的字符一般分为普通字符、非打印字符、特殊字符、限定符、定位符等。

普通字符

正常能够被打印的字符

包括没有显示指定为元字符的所有可打印何不可打印字符。这包括所有大写和小写字母,所有数字,所有标点符号和一些其他符号。

正则表达式在线测试:在线正则表达式测试

注意字符串集合和字符串的区别(图一是集合,图二是字符串

非打印字符

非打印字符是打印出来,但实际看不到

\cx 匹配由x指明的控制字符,如\cM匹配一个Control-M1或者回车符。X值必须为A-Z或a-z之一。否则c将是一个原意的'c'字符。
\f 匹配一个换页符,等价\x0c和\cI。
\n 匹配一个换行符,等价\x0d和\cJ。
\r 匹配一个回车符,等价\x0d和\cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[\f\v\r\t\v]
\S 匹配任何非空白字符。等价于\f\v\r\t\v
\t 匹配一个制表符,等价\x09个\cI
\v 匹配垂直制表符,等价\x0b和\cK

特殊字符

有特殊含义的字符。如果要匹配这些元素需要在字符前面加转义符,即反斜杠字符[]。

$ 匹配输入字符串结尾位置(有几行
[] 标记一个子表达式的开始和结束位置,子表达式可以获取供后面使用
* 匹配前面的子表达式0次或多次
+ 匹配前面的子表达式1次或多次
. 匹配除换行符\n之外的任何单个字符
[ 标记一个中括号表达式的开始
? 匹配前面的子表达式0次或1次,或指明一个非贪婪限定符。
\ 讲下一个字符标记为或特殊字符、或原意字符、或向后引用、或八进制转义符。
^ 匹配输入字符串的开始位置、除非在方括号表达式中使用,此时它表示排除该字符的集合
{ 标记限定符表达式的开始。
| 指明两项之间的一个选择

和+的用法要比较来看,+比的要求更加严格 

?用法和Windows中文件搜索的?一样

管道符可以实现同时匹配,可以理解为或

限定符

* 匹配前面的子表达式0次或多次。例如,zo能匹配"z"以及"zoo",等价于{0,}
+ 匹配前面的子表达式1次或多次,例如,'zo+'能匹配"zo"以及"zoo",但不能匹配"z"。+等价于{1,}
匹配前面的子表达式0次或1次.例如"do[es]?"可以匹配"do"或"does"中的do。?等价于{0,1}
{n} n是一个非负整数,匹配确定的n次。例如,'o{2}'不能匹配"BOb"中的o,但能匹配'fooooood'中所有的o。
{n,} n是一个非负整数。至少匹配n次。例如'0{2,}'不能匹配"BOb"中的'o',但能匹配"foooooood"中所有的o。'0{1,}'等价于'0+'。'o{0,}'则等价于"o"
{n,m} m和n均为非负整数,其中n<=m。最少匹配n次且做多匹配m次。例如,"o{1,3}"将匹配"foooooood"中的前三个o。'o{0,1}'等价于'0?'。注意在逗号和两个数之间不能有空格

常用函数

  • re.findall[]                 最常用

  • re.conpile[]

  • re.match[]                最常用

  • re.search[]               最常用

  • re.finditer[]

  • re.sub[]                    最常用

  • re.subn[]

  • re.split[]

re.findall[]函数

语法:re.findall[pattern,string,flags=0]-->list[列表]

列出字符串模式中的u送头匹配项,并作为列表储存在list列表中

与re.search[]不一样的地方:

re.findall返回的是列表

re.search返回的是文本

re.findall返回的是列表,re.search返回文本

re.findall匹配多个值,re.search只要匹配到就返回,只匹配一个值

re.compile[]函数

语法:re.compile[pattern,flags=0]--->pattern object

根据包含正则表达式的字符串创建模式对象,可以实现更有效率的匹配!用了re.compile以后,正则对象会得到保留,这样在需要多次运用这个正则对象的时候效率会有较大的提升

此外,re.compile[]可以接受可选属性,常用来实现不同的特殊功能和语法变更。

MatchObject(匹配对象)方法

group[]:返回被正则匹配的字符串;

start[]:返回匹配开始的位置;

end[]:返回匹配结束的位置;

span[]:返回一个元组包含匹配(开始,结束)的位置。

re.match[]函数

语法:re.match[pattern,string,flags=0]----->match object or None

在字符串的开始位置匹配正则!如果无匹配,返回None

re.search[]函数

语法:re.search[pattern,string,flags=0]----->match object or None

re.search 函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None

re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失效,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

re.finditer[]函数

语法:re.finditer[pattern,string,flags=0]----->iterator

列出字符串中模式的所有匹配项,并作为一个迭代器(可以被for循环,可以被next遍历)返回。

re.sub[]函数

语法:re.sub[pattern,repl,string,sount=0,flags=0]--------->string

将字符串中所有pattern的匹配项用repl替换

re.subn[]函数

语法:re.subn[pattern,repl,string,count=0,flags=0]

与sub[]实现相同的替换作用,但是subn[]返回一个元组,其中包含新字符串和替换次数!

re.split[]函数

语法:re.split[pattern,string,maxsplit=0,flags=0]----->list

根据模式的匹配项来分割字符串!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python爬虫之正则表达式 的相关文章

随机推荐

  • (LeetCode)全排列

    目录 题目要求 题目理解以及思路分析 代码分部讲解 第一部分 第二部分 题目要求 给定一个不含重复数字的数组 nums 返回其 所有可能的全排列 你可以 按任意顺序 返回答案 示例 1 输入 nums 1 2 3 输出 1 2 3 1 3
  • 规则引擎Drools使用 第十一篇 Drools 的高级语法之LHS增强

    前面我们已经知道了在规则体中的LHS部分是介于when和then之间的部分 主要用于模式匹配 只有匹配结果为true时 才会触发RHS部分的执行 下面我们会针对LHS部分学习几个新的用法 目录 复合值限制in not in 条件元素eval
  • 升压电路(BOOST)与降压电路(BUCK)

    一 电路中产生电流的条件是 1 电路里必须有电源供电 2 电路必须形成闭合回路 降压元器件 升降压电路构成的核心元器件 1 电感 储存能量 电感是无法突变的 工作状态是线性的 2 二极管 3 mos管 首先先分清楚mos是N mos还是P
  • Qt全局宏和变量

    1 Qt 全局宏定义 Qt版本号 QT VERSION major lt lt 16 minor lt lt 8 patch 检测版本号 QT VERSION CHECK major minor patch major lt lt 16 m
  • virtio代码分析(一)-qemu部分

    virtio内容众多 代码分布于qemu linux dpdk等中 而且分为frontend和backend 可以运行于userspace也可以运行于kernelspace 极其难以理解 不看代码只看原理性文档往往流于表面 只有真正看懂了代
  • 大数据准备——安装JDK

    1 解压Linux版本的JDK压缩包 命令行敲入 mkdir home software cd home software rz 上传jdk tar包 这里添加自己tar包的名字 如果rz命令不能使用 先执行yum install lrzs
  • C语言关键字解析

    在C语言中有32个关键字 如下表所示 释 1 声明 1 告诉编译器 这个名字已经匹配到一块内存上 2 告诉编译器 这个名字已经预定了 其他地方再也不能用它来作为变量名或对象名 2 定义 编译器创建一个对象 为这个对象分配一块内存空间 并给它
  • 前端 配色网站 自用 免费 颜色很全

    1 中国色彩 http zhongguose com 3 ColorHex https www colorhexa com 4 优色网配色专区 https color uisdc com 4 ColorDrop https www colo
  • cuda学习

    GPU中有多个流处理器SM 当一个线程块被指定给一个SM后 里面的线程会被划分成线程束 32个线程 在SM上交替运行 也就是说SM上一个时刻只有一个线程束在运行 函数修饰符 global 表示该函数只能在GPU上运行 但是可以从CPU或者G
  • qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method

    最近在做一个网络音乐播放器时 由于出现qt network ssl QSslSocket cannot call unresolved function SSLv23 client method 而不能播放网络歌曲 上网搜了半天 都说要在电
  • Jmeter(二十七) - 从入门到精通 - Jmeter Http协议录制脚本(详解教程)

    1 简介 LoadRunner的录制功能让性能测试脚本编写对于不懂代码的人变成了一件容易上手的事 但是由于LoadRunner收费高昂 庞大 一般企业很少用 除非必须使用 Jmeter作为性能测试中的王者也少不了提供录制功能 Jmeter的
  • 靠!我被项目经理和同事嘲笑了,因为不会远程debug调试...

    大家好 我是曹尼玛 刚从培训机构毕业 去一家单位上班一周了 这一周项目经理让我熟悉了项目业务 架构和设计 不算难 凭借我培训机构第一名的成绩 还是很顺溜 今天项目经理把同事们叫到一起 说线上438x6项目出现奇葩问题 但是开发环境初步测试没
  • SSM框架练习—主从表的业务模型

    需要实现的整体功能 系统的登录并进行用户名的校验 团购信息的列表展示 团购信息的添加 团购信息的检索 1 数据库创建 CREATE DATABASE mydb USE mydb drop table if exists vaccunit C
  • MySQL数据库关于表的一系列操作

    MySQL中的数据类型 varchar 动态字符串类型 最长255位 可以根据实际长度来动态分配空间 例如 varchar 100 char 定长字符串 最长255位 存储空间是固定的 例如 char 10 int 整数型 最长11位 lo
  • 【数据结构 c语言版 】线性表的链式表示和实现

    目录 一 单链表的表示和实现 1 单链表的存储结构 1 1 头指针 头结点与首元结点 1 2 带头结点单链表和不带头结点单链表的比较 2 单链表的初始化 3 单链表的长度 4 单链表的插入 5 单链表的删除 6 单链表的查看 7 单链表的撤
  • auto-gpt部署:openai key, google api key,google engine id

    获取OpenAI API Key 1 打开platform openai com 输入你的OpenAI帐号和密码 2 点击左上角personal gt view api keys gt api keys gt create new scre
  • 不花钱,让"情圣"ChatGPT教你怎么追马斯克

    大家好 我是播妞 你知道吗 如今爆火的ChatGPT 曾经和马斯克还有一段七年的 纠葛 最近 OpenAI发布了史上最强聊天机器人ChatGPT 这个诞生于GPT 3基础上的AI很快走红网络 要说这家伙 天南海北无所不知 可能是夸张了点 但
  • Window XP驱动开发(二) 环境搭建(VS2008+WDK+DDKWzard)及示例源码分析

    郁闷 做了WCE嵌入式驱动这么久还没热身够 又被调到做window xp下的驱动开发 没办法 只能受令了 现在就开始自己的学习之旅吧 转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家提出意见
  • 正则匹配html标签和内容,正则匹配HTML标签(不保留内容和保留内容、过滤标签的的属性)...

    1 匹配双标签 包括内容 过滤标签 不保留内容 var reg1 gt n gi var str1 我是被删除的123123 console log str1 replace reg1 2 匹配标签 不包括内容 过滤标签 保留内容 var
  • Python爬虫之正则表达式

    正则表达式 正则表达式就是规则表达式 在接触爬虫前 正则表达式就是用来过滤的 接触爬虫后发现真的就是过滤用的hhh 正则表达式在爬虫中的作用就是过滤出想要的字符 然后获取 如果不用正则表达式 那么就会将网页中大量信息全部爬出 造成大量内存浪