python基础—正则表达式即re模块!

简介: 正则表达式(regular expression),就是字符匹配模式,而这个匹配规则在我们写爬虫进行数据提取,或者进行数据可视化进行数据清洗时经常用到,多样化的匹配规则在复杂的字符的情况提取数据时助我们一臂之力;在Perl、java、C/C++等编程语言都支持;python是以re模块的形式支持的;

正则表达式(regular expression),就是字符匹配模式,而这个匹配规则在我们写爬虫进行数据提取,或者进行数据可视化进行数据清洗时经常用到,多样化的匹配规则在复杂的字符的情况提取数据时助我们一臂之力;在Perl、java、C/C++等编程语言都支持;python是以re模块的形式支持的;




正则表达式的常见用途:


在模式字符串中根据需求提取子字符串;


字符串内某些字符或者指定字符串进行替换或者删除或者分离;


在用户输入用户名时判断输入字符串格式是否正确;


一,基础



re模块匹配经常用到的元字符和语法

字符型:

预义字符型:

网络异常,图片无法展示
|

数量字符型:


边界、逻辑或组匹配:

网络异常,图片无法展示
|

贪婪模式与非贪恋模式:




贪婪模式的量词也叫做匹配优先量词,主要包括:  “{m,n}”、“{m,}”、“?”、“*”和“+”;


在匹配优先量词后面加上“?”叫做忽略优先量词,主要包括:“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。




贪婪模式:在匹配字符对象满足的情况下尽可能匹配多个字符,指被匹配优先量词修饰的字符串;


非贪婪模式:在匹配规则满足的情况下尽可能匹配少的字符,指被忽略优先量词匹配的字符串;


列个表帮助你深刻理解贪婪模式与非贪婪模式的区别:

网络异常,图片无法展示
|

说明:当字符串遍历到第二个<abc>时就已经满足匹配规则了,但是模式一是贪婪模式需要尽可能匹配多的字符,第三个<abc>后面已经没有能够满足匹配规则的字符了,所以在遍历到第3个<abc>就停下了结果即为:<abc>.*<abc>56.<abc>;而模式二为非贪婪模式即结果为:<abc>56.<abc>




匹配时出现的反斜杠的问题




在用正则匹配时,需要对于某些特殊字符进行转义,就比如‘baidu.com’,匹配时需要写成“baidu\.com”;但是python字符中本身也用‘\’转义,所以需要写成‘baidu\\.com';为了在写匹配字符对象时避免‘\’出现程序问题,我们可以匹配时在字符串前面加一个字母r,转化为原字符串进行匹配,例如 r "baidu\.com";




二、re模板中常用到的函数




re.compile();




re.compile()将一个字符串编译成一个模式对象,便于直接利用search,findall,split等函数直接匹配与搜索或者分割;


re.compile()的原型:re.compile( pattern [, flags] )


pattern表示字符串匹配模式对象,flags表示修饰量词:例如:“*”、“+”;


compile函数的例子:re.compile(r"\d+") : 表示匹配连续多个数字;


compile还有一个参数flag可以设正则表达式修饰符,常用的修饰符如下:

网络异常,图片无法展示
|

对于re.X的解释,例如,图中两个正则表达式是等价的:

网络异常,图片无法展示
|

re.match()


match函数从字符串的头部开始匹配,当字符满足匹配模式对象时会返回一个正确对象(object),当不满足时则就会返回None;例子如下:


字符头部匹配成功:

网络异常,图片无法展示
|

字符串头部匹配失败

网络异常,图片无法展示
|

match还有几个命令,可以连续匹配多个组(用group(n)或者groups()表示),并且组之间的匹配内容用元组来表示:


match还有一些用来查找满足匹配某一组字符串起始、结尾的位置以及范围,使用方法如下:


网络异常,图片无法展示
|


re.search()


search在字符串的任一部位都可以进行匹配,与match相似如果在模式字符串第一次满足指定的匹配对象则返回一个object,若都不满足则返回None;当然可指定模式字符串的匹配起始位置;match、research、findall(后面需要介绍的函数)都可以不经过compile方法直接进行匹配;例子如下图:


网络异常,图片无法展示
|

re.findall()


findall也是对于字符串全部任意部位进行匹配,但是与search的主要区别:匹配组时search只返回满足匹配对象的第一个组,findall则返回所有满足匹配对象的组,而且findall没有group或者groups方法的应用,匹配的值可以直接返回;写个例子大家感受一下:

网络异常,图片无法展示
|

re.sub


sub的原型:sub(pat,repl,string[,count=0]);用string中的pat用字符repl替换;


sub方法的目的:是用一个字符或字符串来替换模式字符串中某一字符或字符串,sub同样可以借用compile中的匹配对象,也可以直接进行匹配,使用方法如下:

网络异常,图片无法展示
|
re.split


split方法的原型:split(pattern,string[,maxsplit = 0])

split作用:根据匹配分割字符对象把字符串分割成一个列表,例子如下:

网络异常,图片无法展示
|

相关文章
|
5天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
18 5
|
10天前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
15天前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
18天前
|
数据采集 Web App开发 JavaScript
python-selenium模块详解!!!
Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
62 5
|
22天前
|
Python
SciPy 教程 之 SciPy 模块列表 6
SciPy教程之常量模块介绍:涵盖公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率及力学单位。示例展示了角度单位转换为弧度的几个常用常量。
17 7
|
22天前
|
Python
SciPy 教程 之 SciPy 模块列表 7
`scipy.constants` 模块提供了常用的时间单位转换为秒数的功能。例如,`constants.hour` 返回 3600.0 秒,表示一小时的秒数。其他常用时间单位包括分钟、天、周、年和儒略年。
17 6
|
19天前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
17 1
|
20天前
|
XML 前端开发 数据格式
超级详细的python中bs4模块详解
Beautiful Soup 是一个用于从网页中抓取数据的 Python 库,提供了简单易用的函数来处理导航、搜索和修改分析树。支持多种解析器,如 Python 标准库中的 HTML 解析器和更强大的 lxml 解析器。通过简单的代码即可实现复杂的数据抓取任务。本文介绍了 Beautiful Soup 的安装、基本使用、对象类型、文档树遍历和搜索方法,以及 CSS 选择器的使用。
51 1
|
21天前
|
Python
SciPy 教程 之 SciPy 模块列表 9
SciPy教程之常量模块介绍,涵盖多种单位类型,如公制、质量、角度、时间、长度、压强等。示例展示了如何使用`scipy.constants`模块查询不同压强单位对应的帕斯卡值,包括atm、bar、torr、mmHg和psi。
13 1
|
21天前
|
Python
SciPy 教程 之 SciPy 模块列表 8
SciPy教程之常量模块单位类型介绍。该模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例展示了部分长度单位的转换值,例如英寸、英尺、海里等。
14 1