当前位置: 首页 > 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…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

网络编程(UDP编程)

思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...