python使用正则表达式(Regular Expression)方法超详细
作者:bingoCoder 发布时间:2022-09-07 14:30:53
一、导入re库
python使用正则表达式要导入re库。
import re
在re库中。正则表达式通常被用来检索查找、替换那些符合某个模式(规则)的文本。
二、使用正则表达式步骤
1、寻找规律;
2、使用正则符号表示规律;
3、提取信息,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。
三、正则表达式中常见的基本符号
1.点号“.”
一个点号可以代替除了换行符(\n)以外的任何一个字符,包括但不限于英文字母、数字、汉字、英文标点符号和中文标点符号。
2.星号“*”
一个星号可以表示它前面的一个子表达式(普通字符、另一个或几个正则表达式符号)0次到无限次。
3.问号“?”
问号表示它前面的子表达式0次或者1次。注意,这里的问号是英文问号。
4.反斜杠“\”
反斜杠在正则表达式里面不能单独使用,甚至在整个Python里都不能单独使用。反斜杠需要和其他的字符配合使用来把特殊符号变成普通符号,把普通符号变成特殊符号。如:“\n”。
5.数字“\d”
正则表达式里面使用“\d”来表示一位数字。再次强调一下,“\d”虽然是由反斜杠和字母d构成的,但是要把“\d”看成一个正则表达式符号整体。
6.小括号“()”
小括号可以把括号里面的内容提取出来。
四、常见的正则表达式举例
1. .*?(匹配所有内容)
例如:'<title>(.*?)</title>' 将网页的标题爬取下来。
2、\w 单词字符[A-Za-z0-9_], "+" 匹配前一个字符1次或无限次 例如:一个人的邮箱是这样的lixiaomei@qq.com,那么我们如何从一大堆的字符串把它提取出来呢?
pattern: \w+@\w+\.com
思考:若邮箱为hello123@heuet.edu.com,如何匹配?
pattern:\w+@(\w+\.)?\w+\.com
?代表了匹配0次或者1次括号分组内的匹配内容,"()"则表示被括内容是一个分组,分组序号从pattern字符串起始往后依次排列。因为是匹配0次或1次,那么就意味着括号内的部分是可有可无的,所以这个pattern就可能匹配以上两种邮箱格式。
扩展: \w+@(\w+\.)*\w+\.com 模式就更厉害了," * " 可以匹配0次或无限次。
五、re库的核心函数
1、compile()函数 (可有可无)
函数定义: compile(pattern, flag=0)
函数描述:编译正则表达式pattern,然后返回一个正则表达式对象。
为什么要对pattern进行编译呢?《Python核心编程》里面是这样解释的:
使用预编译的代码对象比直接使用字符串要快,因为解释器在执行字符串形式的代码前都必须把字符串编译成代码对象。
2、match()函数
函数定义: match(pattern, string, flag=0)
函数描述:只从字符串的最开始与pattern进行匹配,匹配成功返回匹配对象(只有一个结果),否则返回None。
问题来了,为什么result1结果有这么多的东西啊?貌似最后一个才是要匹配的对象。这个要怎么提取出来呀?
别着急,我们现在得到的是匹配对象,需要用一定的方法提取,后面会在《匹配对象的方法》章节来解决这个问题,继续往下看。
3、search()函数
函数定义: search(pattern, string, flag=0)
函数描述:与match()工作的方式一样,但是search()不是从最开始匹配的,而是从任意位置查找第一次匹配的内容。如果所有的字串都没有匹配成功,返回None,否则返回匹配对象。
4、findall()函数
函数定义: findall(pattern, string [,flags])
函数描述:查找字符串中所有出现的正则表达式模式,并返回一个匹配列表
上面同时列出了match、search、findall三个函数用法。findall与match和search不同的地方是它会返回一个所有无重复匹配的列表。如果没找到匹配部分,就返回一个空列表。六、匹配对象的方法(提取)
以上re模块函数的返回内容可以分为两种:
返回匹配对象:就是上面如 <_sre.SRE_Match object; span=(0, 5), match='12345'>这样的对象,可返回匹配对象的函数有match、search、finditer。
返回一个匹配的列表:返回列表的就是 findall。
因此匹配对象的方法只适用match、search、finditer,而不适用与findall。
常用的匹配对象方法有这两个:group、groups、还有几个关于位置的如 start、end、span就在代码里描述了。
1、group方法
方法定义:group(num=0)
方法描述:返回整个的匹配对象,或者特殊编号的字组
再看下面的实例:
这里就需要用到我们之前提到的分组概念。
分组的意义在于:我们不仅仅想得到匹配的整个字符串,我们还想得到整个字符串里面的特定子字符串。如上例中,整个字符串是“我12345+abcde”,但是想得到 “abcde”,我们就可以用()括起来。因此,你可以对pattern进行任何的分组,提取你想得到的内容。
2、groups方法
方法定义:groups(default =None)
方法描述:返回一个含有所有匹配子组的元组,匹配失败则返回空元组
七、re模块的属性(flag)
re模块的常用属性有以下几个:
re.I: 匹配不分大小写;(常用)
re.L: 根据使用的本地语言环境通过\w, \W, \b, \B, \s, \S实现匹配;
re.M: ^和$分别匹配目标字符串中行的起始和结尾,而不是严格匹配整个字符串本身的起始和结尾;
re.S: “.”(点号)通常匹配除了\n(换行符)之外的所有单个字符,该标记表示“.”(点号)能够匹配全部字符;(常用)
re.X: 通过反斜线转义,否则所有空格加上#(以及在该行中所有后续文字)都被忽略,除非在一个字符类中或者允许注释并且提高可读性;
注意:
如果我们定义了compile编译,需要先将flag填到compile函数中,否则填到匹配函数中会报错; 如果没有定义compile,则可以直接在匹配函数findall中填写flag。
附录:
正则表达式中语法一览表
来源:https://blog.csdn.net/bingocoder/article/details/103746826
猜你喜欢
- 最近服务器升级到了win2008 r2,数据库也从sql2000升级到了sql2005,不过安装后发现sql server找不到服务器名这样
- Python2默认是不支持中文的,一般我们在程序的开头加上#-*-coding:utf-8-*-来解决这个问题,但是在我用open()方法打
- 本文实例为大家分享了python学生管理系统的具体代码,供大家参考,具体内容如下```name_list = [] # 存储学生信息字典,学
- 当你连接一个MySQL服务器时,你通常应该使用一个口令。口令不以明文在连接上传输。所有其它信息作为能被任何人读懂的文本被传输。如果你担心这个
- create proc p_sword_getblcolumn ( @tblName varchar(200), @fromIndex in
- XML文档对象模型(DOM)是什么?可扩展标记语言XML的基础是 DOM。XML 文档具有一个称为节点的信息单元层次结构;DOM 是描述那些
- Sun Microsystems公司宣布,正式对外提供MySQL 5.1软件——这是全球最受欢迎的开
- 简单的XML操作:XML文件创建把下面的代码复制到按钮事件中编译执行后可在相应物理路径中产生Pos.xml文件XmlTextWriter x
- 散点图什么是散点图?散点图是指在数理统计回归分析中,数据点在直角坐标系平面上的分布图, 散点图表示因变量随自变量而变化的大致趋势,
- 水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。本文将通过Python代码实现打印水仙花数,具体如
- 使用bootstrap-paginator.js 分页来进行ajax 异步分页请求具体的做法如下 :首先定义一个异步提交请求的ajax 函数
- 1 基本信息- 模块主页:[github]- 类型:#第三方库2 安装方法pip install pythonping3 一般使用from
- webargs是一个用于解析和验证HTTP请求对象的Python库,内置了对流行web框架的支持,包括Flask、Django、Bottle
- 一、 文件的操作1.1创建文件格式:f = open(‘文件', ‘w')或者f = open(‘文件', ‘r&#
- 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了re 模块,它提供 Pe
- 前言目前有一张tif格式的栅格影像,需要在web地图上进行展示,使用动态切片WMS的方式,渲染速度比较慢,而且大的时候会出现模糊的问题。并且
- Static files管理static files指一些用到的像css,javascript,images之类的文件。在开发阶段:1.在s
- 1。mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题。还好mysql数据库提供了一种主从备份的机制,其实就是把主数
- 当需要再次安装SQL Server时,如果序列号找不到了,可以试着从已经安装的实例里找回序列号,因为安装完SQL Server后,序列号(P
- 在python中安装了lxml-4.2.1,在使用时发现导入etree时IDE中报错Unresolved reference其实发现,不影响