当前位置: 首页 > news >正文

python-网络爬虫.regular

regular

正则表达式 (regular expression)

正则表达式(regular expression)描述了一种字符串匹配的模式 (pattern),

可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串 中取出符合某个条件的子串等。

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字 符") 组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正 则 表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

网上有的网上找

网上无的自己写

电话号码匹配

邮箱地址匹配

身份证号匹配

指定字符匹配

\d 匹配数字    \D 匹配非数字

\w 匹配字符    \W 匹配非字符

\s 匹配空白    \S 匹配非空白

\b 匹配边界

百度搜索: 史上最全正则表达式

 

 

(一) 常用正则

1、字符组 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示

 2、字符

 

3、量词

 

(二)正则表达式的使用

 

 

 

 

 

 

.+ 是贪婪的 - 它匹配,直到它不再匹配,只返回所需的数量.

.+? 不是贪婪的,它在第一次机会匹配即停止.

例子:

 

(二)常用方法

re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是 基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配, 提取自己需要的字符串部分,他对所有的语言都通用。注意:

• re模块是python独有的

• 正则表达式所有编程语言都可以使用

• re模块、正则表达式是对字符串进行操作

因为,re模块中的方法大都借助于正则表达式,故先学习正则表达式。

 

 

第一步: import re

第二步: pat= re.compile(r'◎片名:(.*)\n') #r内的字符串就是正则表达 式的规则字符串

第三步: ret =re.findall(pat,html) #开始在目标html字符串中按照正则表 达式来依次匹配

第四步: print(ret) #将匹配成功的信息打印输出

1、re.compile(pattern,flags = 0 ) 将正则表达式模式编译为正则表达式对象,可使用match(),search()以及 下面所述的其他方法将其用于匹配

>>> prog = re.compile('\d{2}') # 正则对象

>>> prog.search('12abc')

  >>> prog.search('12abc').group()

# 通过调用group()方法得到匹配的字符 串,如果字符串没有匹配,则返回None。

'12'

>>> prog.match('123abc')

 >>> prog.match('123abc').group() '12'

>>>

2、re.search(pattern,string,flags = 0 )

扫描字符串以查找正则表达式模式产生匹配项的第一个位置 , 然后返回相应的match对象。None如果字符串中没有位置与模式匹配,则 返回;

否则返回false。请注意,这与在字符串中的某个点找到零长度匹配不同。

#在这个字符串进行匹配,只会匹配一个对象

>>> re.search('\w+','abcde').group()

'abcde'

>>> re.search('a','abcde').group()

'a'

>>>

3、re.match(pattern,string,flags = 0 )

如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的 匹配对象。

None如果字符串与模式不匹配,则返回;否则返回false。

请注 意,这与零长度匹配不同。

# 同search,不过在字符串开始处进行匹配,只会匹配一个对象

>>> re.match('a','abcade').group()

'a'

>>> re.match('\w+','abc123de').group()

'abc123de'

>>> re.match('\D+','abc123de').group()         #非数字

'abc'

>>>

4、re.fullmatch(pattern,string,flags = 0 )

如果整个字符串与正则表达式模式匹配,则返回相应的match对象。None

如果字符串与模式不匹配,则返回;否则返回false。请注意,这与零长度 匹配不同。

>>> re.fullmatch('\w+','abcade').group()

'abcade'

>>> re.fullmatch('abcade','abcade').group()

'abcade'

>>>

5、re.split(pattern,string,maxsplit = 0,flags = 0 )

  通过出现模式来拆分字符串。如果在pattern中使用了捕获括号,那么 模式中所有组的文本也将作为结果列表的一部分返回。如果maxsplit不为 零,则最多会发生maxsplit分割,并将字符串的其余部分作为列表的最后一 个元素返回。

>>> re.split('[ab]', 'abcd')         # 先按'a'分割得到''和'bcd',在对''和'bcd'分别 按'b'分割

['', '', 'cd']

>>> re.split(r'\W+', 'Words, words, words.')

['Words', 'words', 'words', ''] >>> re.split(r'(\W+)', 'Words, words, words.') ['Words', ', ', 'words', ', ', 'words', '.', '']

>>> re.split(r'\W+', 'Words, words, words.', 1)

['Words', 'words, words.']

>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)

['0', '3', '9']

如果分隔符中有捕获组,并且该匹配组在字符串的开头匹配,则结果将从 空字符串开始。字符串的末尾也是如此:

>>> re.split(r'(\W+)', '...words, words...')

['', '...', 'words', ', ', 'words', '...', '']

6、re.findall(pattern,string,flags = 0 )

  以string列表形式返回string中pattern的所有非重叠匹配项。从左到右 扫描该字符串,并以找到的顺序返回匹配项。如果该模式中存在一个或多 个组,则返回一个组列表;否则,返回一个列表。如果模式包含多个组, 则这将是一个元组列表。空匹配项包含在结果中。

>>> re.findall('a', 'This is a beautiful place!')

['a', 'a', 'a']

>>>

7、re.finditer(pattern,string,flags = 0 )

返回一个迭代器,该迭代器在string类型的RE 模式的所有非重叠匹配中产 生匹配对象。 从左到右扫描该字符串,并以找到的顺序返回匹配项。空匹 配项包含在结果中。

>>> re.finditer('[ab]', 'This is a beautiful place!')

 >>> ret=re.finditer('[ab]', 'This is a beautiful place!')

>>> next(ret).group() #查看下一个匹配值

'a'

>>> [i.group() for i in ret]         #查看剩下所有匹配的值

['b', 'a', 'a']

>>>

8、re.sub(pattern,repl,string,count = 0,flags = 0 )   

        返回通过用替换repl替换字符串中最左边的不重叠模式所获得的字符 串。如果找不到该模式, 则返回的字符串不变。 repl可以是字符串或函 数;如果是字符串,则处理其中的任何反斜杠转义。即,将其转换为单个 换行符,将其转换为回车,依此类推。count参数表示将匹配到的内容进行 替换的次数

>>> re.sub('\d', 'S', 'abc12jh45li78', 2)         #将匹配到的数字替换成S,替换2个

'abcSSjh45li78'

>>> re.sub('\d', 'S', 'abc12jh45li78')         #将匹配到所有的数字替换成S

'abcSSjhSSliSS'

>>>

9、re.subn(pattern,repl,string,count = 0,flags = 0 )

执行与相同的操作sub(),但返回一个元组。(new_string, number_of_subs_made)

>>> re.subn('\d', 'S', 'abc12jh45li78', 3)

('abcSSjhS5li78', 3)

>>>

10、re.escape(pattern)

escape中的所有字符图案,除了ASCII字母,数字和'_'。如果要匹配可能包含正则表达式元字符的任意文字字符串,这将很有用。

>>> re.escape('python.exe\n')

'python\\.exe\\\n'

>>>

11、search()与match()方法

Python提供了两种基于正则表达式的原始操作: re.match()仅在字符串的 开头匹配,re.search()检查匹配项,在字符串中的任何位置检查匹配项(这 是Perl的默认设置)。

>>> re.match("c", "abcdef")         #Not match

>>> re.search("c", "abcdef")         #match

 >>>

以开头的正则表达式'^'可用于search()限制字符串开头的匹配项:

>>> re.match("c", "abcdef") #Not match

>>> re.search("^c", "abcdef") #Not match

>>> re.search("^a", "abcdef") #match

 

>>>

参考:

https://docs.python.org/3.6/library/re.html

https://www.cnblogs.com/Eva-J/articles/7228075.html#_label7

https://www.cnblogs.com/shenjianping/p/11647473.html

\xa0 是不间断空白符

str.replace(u’\xa0’, u’ ‘)

\u3000 是全角的空白符

str.replace(u’\u3000’,u’ ‘)

title.strip(‘\r\n’).replace(u’\u3000’, u’ ‘).replace(u’\xa0’, u’ ‘) content.strip(“”).strip(‘\r\n’).replace(u’\u3000’, u’ ‘).replace(u’\xa0’, u’ ‘)

相关文章:

python-网络爬虫.regular

regular 正则表达式 (regular expression) 正则表达式(regular expression)描述了一种字符串匹配的模式 (pattern), 可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串 中取出符合某个条件的子串等。 正则表达式是由普通…...

手动搭建gateway,项目集成gateway实现Token效果

目录 背景步骤1、首先创建springboot项目2、引入依赖3、配置文件!!!!!(超级重要!!!根据自己的需要进行配置)4、相关类我们在服务中进行的白名单中接口的操作如…...

linux下SVN服务器搭建

在本教程中,我们将介绍如何在Linux系统下搭建Subversion(SVN)服务器。Subversion是一种流行的版本控制系统,它允许多个人在同一项目上进行协作,同时避免了他们各自的更改发生冲突。 安装SVN 在大多数Linux发行版中&am…...

技术等级 TRL 定义

“不同环境、不同目标下TRL表述不一样” 技术等级 TRL 定义 TRL1 基本原理提出和发现 TRL2 技术应用研究 TRL3 完成概念验证,如叶栅试验、燃烧室头部试验等 TRL4 完成模拟部件试验.如压气机性能试验,燃烧室扇形试验 TRL5 完…...

DHorse v1.3.0 发布,基于k8s的发布平台

综述 DHorse是一个简单易用、以应用为中心的云原生DevOps系统,具有持续集成、持续部署、微服务治理等功能,无需安装依赖Docker、Maven、Node等环境即可发布Java、Vue、React应用,主要特点:部署简单、操作简洁、功能快速。 新增特…...

Redis - 缓存的双写一致性

概念: 当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致 那为什么会有不一致的情况呢? 如果不追求一致性,正常有两种做法 先修改数据库 后删除旧的缓存先删除旧的缓存 再修改数据库 我们以先删除旧的…...

opencv03-Mat矩阵API的使用

opencv03-Mat矩阵API的使用 构造方法(具体介绍看API文档) int main() {Mat m1 Mat(200, 100, CV_8UC1);imshow("o1", m1);Mat m2 Mat(Size(100, 200), CV_8UC1);imshow("o2", m2);Mat m3 Mat(200, 100, CV_8UC3, Scalar(255, 0, 0));imshow("o3&…...

2023届浙江大学MPA提面A资格经验总结分享

本人是去年报考的浙大MPA项目,并通过提面获得了A资格,新一年浙大MPA项目提前批面试已经开始了,受达立易考周老师邀请来分享下我的提面经验,希望我的经验能对还在迷茫中的小伙伴有所帮助。 点开提面通知,首先看到…...

BugKu CTF(杂项篇MISC)—想要种子吗

BugKu CTF(杂项篇MISC)—想要种子吗 提 示: 描 述:flag{} 题目下载后是一张图片,打开如下。 一、工具 十六进制编辑器010 editor kali系统文件分离工具binwalk或者foremost 维吉尼亚密码 STEGHIDE图片隐写工具 文章所需的软件下载地址 ARCHPR压缩包密码破解…...

类之间的关系

1、类关系 继承、实现、依赖、组合、聚合 继承:一个类继承另一个类; 实现:一个类实现另一个接口; 依赖:一个类作为另一个的局部变量,方法的参数,临时对象等; 组合:一个类…...

【蓝图】p40-p43对象引用、变量有效性、实现键盘控制物体自转、简单点名系统

p40-p43对象引用、变量有效性、实现键盘控制物体自转、简单点名系统 p40对象引用、变量有效性p41实现键盘控制物体自转创建bool值控制旋转实现通过键盘控制自转 p42p43简单点名系统Get All Actors Of Class(获得场景中所有该类的actor演员)getFor Each L…...

vscode设置远程登录和免密登录

首先,我们去官网下载VScode 安装过程比较简单,大家自行安装即可,注意建议安装在除C盘外的其他盘中。 安装完成后,打开我们下载好的VScode,点击左侧的Extensions选项,搜索Remote,Install第一项R…...

今日头条面试真题及答案,软件测试工程师面试秘籍

试题1.在浏览器地址栏里输入一个网址,接下来会发生什么? 答案:发生的操作如下。 (1)浏览器查找该网址的IP地址。 (2)浏览器根据解析得到的IP地址向Web服务器发送一个HTTP请求。 &am…...

JavaScript Windows 浏览器对象模型

Window 对象 BOM 的核心就是 window 对象所有浏览器都支持 window 对象。它表示浏览器窗口。所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。全局变量是 window 对象的属性。全局函数是 window 对象的方法。HTML DOM 的 document 也是 window 对象的属…...

【uniapp 获取缓存及清除缓存】

小程序及H5 获取缓存: 使用uniapp中的wx.getStorageInfoSync()方法可以获取当前小程序或H5应用的本地缓存信息,如下所示: let storageInfo uni.getStorageInfoSync() console.log(storageInfo)其中,storageInfo是一个对象&…...

【vim 学习系列文章 2 - vim 常用插件配置】

文章目录 1.1 vim 常用插件1.1.1 vim 插件 Pathogen 管理1.1.2 vim 常用插件推荐1.1.3 vim Leaderf1.1.4 vim ripgrep 工具1.1.5 vim Leaderf 配合 rg1.1.6 vim autocmd 配置 1.2 其它类型文件 vimrc 配置1.2.1 System Verilog vimrc 配置 上篇文章:vim 学习系列文章…...

【外卖系统】修改菜品

需求分析 在菜品管理列表页面点击修改按钮,跳转到修改页面,在修改页面回显菜品相关信息并进行修改,在最后点击确定按钮完成修改操作 代码设计 页面发送ajax请求,请求服务端获取分类数据,用于菜品分类下拉框中数据显…...

【暑期每日一练】 day11

目录 选择题 (1) 解析: (2) 解析: (3) 解析: (4) 解析: (5) 解析: 编程题 题一 描…...

神经概率语言模型

本文主要参考《A Neural Probabilistic Language Model》这是一篇很重要的语言模型论文,发表于2003年。主要贡献如下: 提出了一种基于神经网络的语言模型,是较早将神经网络应用于语言模型领域的工作之一,具有里程碑意义。采用神经网络模型预测下一个单词…...

什么是shadow DOM?

Shadow DOM(影子DOM)是一种用于在Web组件中封装HTML、CSS和JavaScript的技术。它是Web组件的一个重要特性,旨在将组件的结构、样式和行为封装在一个独立的、隔离的DOM树中,从而与主文档的DOM树相互隔离。 传统的Web开发中&#x…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...