python爬虫 正则表达式详解
正则表达式
最近学校布置了一个关于python爬虫的期末作业,而我之前对python爬虫一直都比较感兴趣但是没有系统的学过,就想借此机会开个新坑来系统学习和应用python爬虫,那我们开始吧
正则表达式在爬虫中扮演很重要的角色,几乎所有有关字符串的操作都可以使用正则表达式来完成,其可以帮助我们高效地从网页获取提取的信息.在正式接触爬虫之前是非常有必要的学习正则表达式,所有关于正则表达式的操作都使用 python 标准库中的 re 模块
元字符
元字符是正则表达式中具有特殊含义的字符,其用于构建更复杂的模式匹配规则
| 元字符 | 匹配内容 | 实例 |
|---|---|---|
| . | 匹配除换行符以外的任意单个字符 | 如a.b 可以匹配 aXb, a1b, a b |
| \w | 匹配所有普通字符(数字、字母或下划线)→[a-z A-Z 0-9 _] | 如\w{3}可以匹配abc,a1b,12_ |
| \s | 匹配任意的空白符,包括空格,制表符,换页符等等 | 如\s{3}可以匹配三个连续的空格 |
| \d | 匹配数字→[0-9] | 如\d{3}可以匹配123,456 等等 |
| \n | 匹配一个换行符 | |
| \t | 匹配一个制表符 | |
| \b | 匹配一个单词的结尾 | 如\bcat\b匹配cat |
| ^ | 匹配字符串的开始位置,多行模式下匹配每一行的开始 | 如^abc只能匹配abc开头的字符串 |
| $ | 匹配字符串的结尾位置,多行模式下匹配每一行的结束 | 如abc$只能匹配以abc结尾的字符串 |
| \W | 匹配非字母或数字或下划线→[^a-z A-Z 0-9 _] | 如\W{3}可以匹配!!!,***等等 |
| \D | 匹配非数字→[^0-9] | 如 \D{3}可以匹配abc,xyz等等 |
| \S | 匹配非空白符 | \S{3}可以匹配abc,123等等 |
| 或运算符,匹配左边或右边的表达式 | ||
| ( ) | 正则表达式分组所用符号,匹配括号内的表达式,表示一个组。 | 如(ab)+ 可以匹配ab,ab,abab等等 |
| [...] | 匹配字符组中的字符 | 如[abc]可以匹配a,b或c |
| [^...] | (否定字符集) 匹配除了字符组中字符的所有字符 | 如[^abc]可以匹配除a,b,c的所有字符 |
| * | 匹配前面的子表达式0次或多次 | 如ab*c可以匹配ac,abc,abbc等等 |
| + | 匹配前面的子表达式1次或多次 | 如ab+c 可以匹配abc,abbc,但不能直接匹配ac |
| ? | 匹配前面的子表达式0次或1次 | 如ab?c可以匹配ac,abc,不能匹配abbc |
| 匹配前面的子表达式恰好 n 次 | 如a{3}只能匹配aaa |
|
| 匹配前面的子表达式至少 n 次 | 如a{2,}可以匹配aa,aaa,aaaa等等 |
|
| 匹配前面的子表达式至少 n 次,最多 m 次 | 如a{2,4}可以匹配aa,aaa,aaaa,但不能匹配aaaaa |
|
| \ | 转义字符,用于匹配特殊字符 | 如\.匹配字面上的. |
贪婪模式与非贪婪模式
在正则表达式中,贪婪模式与非贪婪模式是两种不同的匹配策略,都用于控制量词(
*,+,?,{})的行为
贪婪模式
默认情况下,大多数的量词都是贪婪的,贪婪模式会尽可能的多匹配字符,直到无法匹配
常见的贪婪量词:
*:匹配前面的子表达式零次或多次+:匹配前面的子表达式一次或多次?:匹配前面的子表达式零次或一次{n}:匹配前面的子表达式恰好 n 次{n,}:匹配前面的子表达式至少 n 次- {
n,m}:匹配前面的子表达式至少 n 次,最多 m 次
eg:假设一个字符串
”abcdadcde”,使用贪婪模式匹配a.*eimport re text = "abcdadcde"
pattern = re.compile(r'a.*e') match = pattern.search(text)
print(match.group()) # 输出abcdadcde
- 在这个例子中,
.*会尽可能多地去匹配字符,直到最后一个e
- 在这个例子中,
非贪婪模式
- 相比与贪婪模式,非贪婪模式会尽可能地少的去匹配字符,直到条件满足为止,非贪婪模式通过在量词后加上
?来启用 - 常见的非贪婪量词
*?:匹配前面的子表达式零次或多次,但尽可能少地匹配。+?:匹配前面的子表达式一次或多次,但尽可能少地匹配。??:匹配前面的子表达式零次或一次,但尽可能少地匹配。{n}?:匹配前面的子表达式恰好 n 次,但尽可能少地匹配。{n,}?:匹配前面的子表达式至少 n 次,但尽可能少地匹配。{n,m}?:匹配前面的子表达式至少 n 次,最多 m 次,但尽可能少地匹配
eg:假设先有一个字符串”abcdeabcde”,其匹配模式修改为a.*?e
import re
text = "abcdeabcde"
pattern = re.compile(r'a.*?e')
match = pattern.search(text)
print(match.group()) # 输出abcde
python爬虫 正则表达式详解的更多相关文章
- python爬虫知识点详解
python爬虫知识点总结(一)库的安装 python爬虫知识点总结(二)爬虫的基本原理 python爬虫知识点总结(三)urllib库详解 python爬虫知识点总结(四)Requests库的基本使 ...
- Python:正则表达式详解
正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能 ...
- Python爬虫 | Selenium详解
一.简介 网页三元素: html负责内容: css负责样式: JavaScript负责动作; 从数据的角度考虑,网页上呈现出来的数据的来源: html文件 ajax接口 javascript加载 如果 ...
- Python爬虫实战详解:爬取图片之家
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 如何使用python去实现一个爬虫? 模拟浏览器请求并获取网站数据在原始数据 ...
- Linux文本处理三剑客之grep及正则表达式详解
Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...
- Java 正则表达式详解_正则表达式
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- Python开发技术详解PDF
Python开发技术详解(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1F5J9mFfHKgwhkC5KuPd0Pw 提取码:xxy3 复制这段内容后打开百度网盘手 ...
- Django url配置 正则表达式详解 分组命名匹配 命名URL 别名 和URL反向解析 命名空间模式
Django基础二之URL路由系统 本节目录 一 URL配置 二 正则表达式详解 三 分组命名匹配 四 命名URL(别名)和URL反向解析 五 命名空间模式 一 URL配置 Django 1.11版本 ...
- python协程详解,gevent asyncio
python协程详解,gevent asyncio 新建模板小书匠 #协程的概念 #模块操作协程 # gevent 扩展模块 # asyncio 内置模块 # 基础的语法 1.生成器实现切换 [1] ...
- Python基础知识详解 从入门到精通(七)类与对象
本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详 ...
随机推荐
- C语言:应用程序增加库函数rand的步骤
rand函数用来生成随机数,函数原型为int rand( void ); 返回值为生成的随机数,范围0~32767.在调用rand之前可以用srand函数初始化随机数发生器来生成更随机的数. 可以通过 ...
- 【YashanDB知识库】绑定参数,同一个sql多个执行计划的问题
问题现象 同一个sql有两个执行计划,是否合理? 它的EXECUTIONS,ELAPSED_TIME等统计信息怎么看,是独立分开的还是统一计算的? 如下图: 问题影响版本 tpcc测试:23.2.1. ...
- 合合信息参编“生成式人工智能个人信息保护技术要求系列标准”,助力AI行业可信发展
生成式人工智能作为新一轮的技术革命成果,在赋能千行百业,给经济社会发展带来新机遇的同时,也产生了个人信息泄露.数据安全风险等问题.在此背景下,中国信息通信研究院(简称"中国信通院" ...
- 搭建高效攻防靶场vulfocus与Docker仓库管理实战:从听说到入门系列
搭建高效攻防靶场vulfocus与Docker仓库管理实战:从听说到入门系列 vulfocus 简介 vulfocus,作为一款前沿的漏洞集成平台,它巧妙地将多种最新的CVE漏洞环境封装于Docker ...
- 微信js-sdk接入原理
1.有一个微信公众号,并获取到该公众号的AppID和AppSecret. 其中AppID是可以对外公开的,AppSecret是该公众号的密钥,是需要绝对保密的 2.向微信服务器发送一个GET请求,获取 ...
- JavaScript习题之简答题
1.分别描述HTML.CSS.JS在页面组成中的作用.HTML是超文本标记语言,是用来描述网页的语言,定义网页的结构,内容可以包含文字.图片.视频等. CSS是层叠样式表,定义如何显示HTML元素,比 ...
- MyBatis——注解开发
注解开发完成增删改 * (在完成简单功能时)使用注解开发会比配置文件开发更加方便 查询:@Select 添加:@Insert 修改:@Update 删除:@Delete ...
- RTThread内对##连接符和#转字符串这俩符号的使用
早就知道这俩符号的意思,最近翻看代码又看到了,仍然觉得熟悉又陌生,主要是自己平时写代码对这俩符号用的比较少.于是特地做个实验,加深下理解.可记的东西不多,这篇随笔算是随手一写吧. 上实验代码: 来源: ...
- for循环遍历的盗版笔记
遍历一个List有如下几种方法 5 6 是 java8 增强for循环底层由Iterator实现 增强for的出现时替代迭代器的,所以在遍历集合或者遍历数组就可以使用增强for去完成 增强for循 ...
- 11-react使用props.children 处理父子组件之间的传值
// props.children 组件传值 import { Component } from "react" import reactDom from "react- ...