Python基础(十一)--正则表达式

                            Python基础(十一)--正则表达式

1 简述

正则表达式可以对指定的字符串与模式之间执行模式匹配。模式可以是普通的字符串,也可以是含有特殊意义字符的字符串。通过正则表达式,我们可以进行查找,校验等。

2 特殊字符

2.1 字符相关

下表字符匹配内容匹配单个字符。\ 在Python中是转义的开始,在正则表达式中也是转义的开始。如果模式使用原始字符串,可以减少转义的繁琐性。

字符

说明

.

默认模式下,匹配除换行符(\n)之外的所有单个字符。在S(DOTALL)模式下,匹配所有单个字符。

[字符]

匹配[]内的任意一个字符。[]中可以是单个字符,如[x9k],也可以是一个字符区间,如[a-k],[3-5]。如果需要匹配“-”,可以使用“\-”转义,或者将该字符置于[]的两端,如[-axk]或[axk-]。如果需要匹配“]”,可以使用“\]”转义,或者将该字符置于[]的最前端,如[]axk]。

[^字符]

匹配不在[]内的任意一个字符,[]的取反匹配。

\d

如果是str类型,匹配Unicode十进制数字,这包括但不限于0 ~ 9,例如0,٧等字符,也能够匹配成功。如果是bytes类型,匹配[0-9]。

\D

匹配非Unicode数字字符,\d的取反匹配。

\s

如果是str类型,匹配Unicode空白符,这包括但不限于[空格\t\v\r\n\f]。如果是bytes类型,匹配[空格\t\v\r\n\f]。

\S

匹配非Unicode空白字符,\s的取反匹配。

\w

如果是str类型,匹配Unicode单词字符,这包括但不限于[a-zA-Z0-9_]。如果是bytes类型,则匹配[a-zA-Z0-9_]。

\W

匹配非Unicode单词字符,\w的取反匹配。

\

转义字符,对正则表达式的特殊字符进行转义,例如,如果要匹配普通的“.”字符,则可以使用“\.”。

 

2.2 次数相关

字符

说明

*

匹配前面的字符0次或多次。

+

匹配前面的字符1次或多次。

?

匹配前面的字符0次或1次。

{m}

匹配前面的字符m次。

{m,}

匹配前面的字符至少m次。

{,n}

匹配前面的字符至多n次。

{m,n}

匹配前面的字符m到n次。

X?

X表示以上的任意一种模式({m}除外),即在对应的模式字符串后面加上一个问号?,表示该模式的非贪婪模式(否则为贪婪模式)。贪婪模式与非贪婪模式的区别在于:贪婪模式会尽可能匹配最多的字符,而非贪婪模式会尽可能匹配最少的字符。

 

2.3 边界相关

字符

说明

^

匹配字符串的开头。在多行模式下,可以匹配每一行的开头。

$

匹配字符串的结尾。在多行模式下,可以匹配每一行的末尾。

\A

仅匹配字符串的开头。

\Z

仅匹配字符串的末尾。

\b

匹配单词的边界。单词可以含有Unicode字符、数字与下划线组成(\w+匹配的内容)。\b匹配的是空串,该空串可以出现在\w(\W)与\W(\w)之间、字符串开头与\w之间或\w与字符串结尾之间。

\B

匹配单词的非边界。\B匹配的是空串,该空串必须出现在两个\w之间。\B是\b的取反匹配。

 

2.4 组相关

字符

说明

()

对()内的字符进行分组。分组后,该组匹配的内容可以单独提取,同时,也可以在模式字符串后面使用\number进行引用。

\number

number用来指定组序号,序号从1开始。用来匹配number对应的分组内容。

(?:表达式)

匹配()内的字符,但是不会进行分组。()内匹配的内容也无法单独提取,或者在后面使用\number引用。

(?P<name>表达式)

对()内的字符进行分组,组名为name,多个组之间的名称不能重复。分组后,该组匹配的内容可以单独提取,同时,也可以在模式字符串后面使用(?P=name)或\number进行引用。对比之前()进行的序号分组,此种方式可以称为命名分组。不过,命名分组依然也可以使用序号(\number)进行引用。

(?P=name)

用来匹配同名的分组内容【之前使用(?P<name>)进行的分组】。

|

用来连接两个并列的模式字符串,匹配其中的一个即可。

 

2.5 控制标记

re模块正则表达式的第三个参数flag的使用。(3.6后,使用RegexFlag对象)

I(IGNORECASE):忽略大小写

M(MULTILINE):匹配所有的字符

S(DOTALL):多行模式

 

3 相关属性和方法

3.1 re模块的函数

re模块提供的函数功能search,match等,使用re.compile编译后返回的正则表达式也提供相应的功能,他们的区别为:①重复使用同一个模式进行匹配不同目标。使用正则表达式对象编译后,会提高一定的性能因为不需要对同一个模式进行重复编译。②使用正则表达式对象访问方法时,可以指定开始与结束区间,re无此功能

函数描述
re.compile()参数1:模式,参数2:控制标记。根据参数提供的模式与控制标记,编译返回一个正则表达式对象
re.search()使用正则表达式对象进行匹配查找
re.match与search功能相同,仅能从头部进行进行查找
re.findall()查找所有匹配内容,返回一个列表
re.finditer()返回所有匹配的内容,返回一个迭代器,迭代器中的每一个对象是match对象(正则表达式匹配的对象)
re.split()参数1:切割模式,参数2:待切割的字符串,参数3:最大切割次数
re.sub()参数1:替换的模式(要替换的内容),参数2:替换后的内容,参数3:待搜索的字符串,参数4:最大替换次数。参数5;控制标记。返回替换之后的内容

 

3.2 正则表达式对象

正则表达式匹配之后,会返回一个match对象,具有的属性方法如下:

属性描述
string待匹配的文本
re匹配时使用的patter对象(正则表达式)
pos搜索文本的开始位置
endpos搜索文本的结束位置
方法描述
group()获得匹配后的字符串
groups()返回一个元组,元组中的元素为所有分组的匹配结果
start()匹配字符串在原始字符串的开始位置
end()匹配字符串在原始字符串的结束位置
span()返回(.start(), .end())

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 0x 使用可变参数模板类 实现 C# 的委托机制

1 #ifndef _ZTC_DELEGATE_H_2 #define _ZTC_DELEGATE_H_3 4 #include <vector>5 #include <functional>6 7 ///8 // C 使用 可变参数模板类, 来实现9 // C#中的 委托 10 // Anchor: ztc 11 // Date : 2014-01-10 12 /// 13 14 template<typename R, typename …

爬虫技巧:在pycharm 下 调试 scrapy项目

&#xff08;1&#xff09; 用pycharm导入scrapy项目 &#xff08;2&#xff09;选择自己编写的scrapy&#xff0c;run一下 &#xff08;3&#xff09;点击菜单栏的run &#xff0c;选择Edit Configurations。 &#xff08;4&#xff09;选择运行的spider文件 &#xff08;5&am…

LeetCode 1626. 无矛盾的最佳球队(最大上升子序DP)

文章目录1. 题目2. 解题1. 题目 假设你是球队的经理。对于即将到来的锦标赛&#xff0c;你想组合一支总体得分最高的球队。球队的得分是球队中所有球员的分数 总和 。 然而&#xff0c;球队中的矛盾会限制球员的发挥&#xff0c;所以必须选出一支 没有矛盾 的球队。 如果一名…

Spark内核架构

1、初识Spark Spark是分布式的&#xff0c;主要基于内存的&#xff0c;适合迭代计算的大数据计算框架。注意基于内存&#xff1a;是优先考虑将数据放到内存中&#xff0c;因为在内存中具有更好的数据本地性&#xff0c;但是如果内存放不下也会放在磁盘上&#xff0c;或者部分数…

ubuntu 安装 LAMP

1、apt更新源 apt-get install apache2 php5 mysql-server mysql-client php5-mysql libapache2-mod-php5 转载于:https://www.cnblogs.com/ccdc/p/3448650.html

爬虫最基本的工作流程:内涵社区网站为例

网络爬虫&#xff08;又被称为网页蜘蛛&#xff0c;网络机器人&#xff09;就是模拟客户端发送网络请求&#xff0c;接收请求响应&#xff0c;一种按照一定的规则&#xff0c;自动地抓取互联网信息的程序。 只要是浏览器能做的事情&#xff0c;原则上&#xff0c;爬虫都能够做…

LeetCode 网易-2. 古老的游戏机

文章目录1. 题目2. 解题1. 题目 小易有一个古老的游戏机&#xff0c;上面有着经典的游戏俄罗斯方块。因为它比较古老&#xff0c;所以规则和一般的俄罗斯方块不同。 首先&#xff0c;荧幕上一共有 n 列&#xff0c;每次都会有一个 1 x 1 的方块随机落下&#xff0c;在同一列中…

sudo: unable to resolve host ubuntu提示的解决

http://blog.sina.com.cn/s/blog_6c9d65a1010180mg.html转载于:https://www.cnblogs.com/wangkongming/p/3516449.html

RDD(弹性分布式数据集)

1、什么是RDD RDD&#xff08;分布式弹性数据集&#xff09;是对分布式计算的抽象&#xff0c;代表要处理的数据&#xff0c;一个数据集,RDD是只读分区的集合。数据被分片&#xff0c;分成若干个数据分片&#xff0c;存储到不同的节点中&#xff0c;可以被并行的操作&#xff…

爬虫Scrapy框架基本流程图入门:以东莞阳光网为例

一、Scrapy简单介绍 Scrapy是一个为了爬取网站数据&#xff0c;提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘&#xff0c;信息处理或存储历史数据等一系列的程序中。 所谓网络爬虫&#xff0c;就是一个在网上到处或定向抓取数据的程序&#xff0c;当然&#xff0…

Eclipse自动补全功能轻松设置 || 不需要修改编辑任何文件

本文介绍如何设置Eclipse代码自动补全功能。轻松实现输入任意字母均可出现代码补全提示框。Eclipse代码自动补全功能默认只包括 点"." &#xff0c;即只有输入”."后才出现自动补全的提示框。想要自动补全总是去按 “Alt / ”也很麻烦。 其实只需简单在Eclips…

RDD持久化、广播、累加器

1、持久化 RDD的持久化包括两个方面&#xff1a;①操作RDD的时候怎么保存结果&#xff0c;这个部分属于action算子的部分②在实现算法的时候要进行cache、persist&#xff0c;还有checkpoint进行持久化。 1.1 persist和cache Spark稍微复杂一点的算法里面都会有persit的身影…

微信定时向好友发信息(循环发信息)

确保自己电脑系统时间准确&#xff1a;1.打开 浏览器&#xff1b;2.访问微信网页版&#xff1a;https://wx.qq.com/&#xff0c;并扫描登录&#xff1b;3.在左侧找到该联系人&#xff0c;选中后对话&#xff0c;右侧会显示进入聊天窗口&#xff1b;4.把你要发的内容写在输入框内…

LeetCode 网易-1. 分割环(前缀和 + 哈希)

文章目录1. 题目2. 解题1. 题目 小易有 n 个数字排成一个环&#xff0c;你能否将它们分成连续的两个部分(即在环上必须连续)&#xff0c;使得两部分的和相等&#xff1f; 输入描述&#xff1a; 第一行数据组数 T &#xff0c;对于每组数据 第一行数字 n &#xff0c;表示数字…

[jstl] forEach标签使用

在JSP的开发中&#xff0c;迭代是经常要使用到的操作。例如&#xff0c;逐行的显示查询的结果等。在早期的JSP中&#xff0c;通常使用Scriptlets来实现Iterator或者Enumeration对象的迭代输出。现在&#xff0c;通过JSTL的迭代标签可以在很大的程度上简化迭代操作。 JSTL所支持…

RDD的依赖与分区

1 宽依赖和窄依赖 RDD从具体的依赖的角度讲&#xff0c;有窄依赖和宽依赖2种情况。 窄依赖&#xff1a;指每个父RDD的一个Partition最多被子RDD的一个Partition所使用&#xff0c;例如map、filter等都会产生窄依赖&#xff1b; 宽依赖&#xff1a;指一个父RDD的Partition会被…

爬虫案列:京东商城长裤信息获取

1、创建Scrapy项目 使用全局命令startproject创建项目&#xff0c;创建新文件夹并且使用命令进入文件夹&#xff0c;创建一个名为jingdong的Scrapy项目。 [python] view plaincopy scrapy startproject jingdong 2.使用项目命令genspider创建Spider [python] view plaincopy …

ACwing 2. 01背包问题(DP)

文章目录1. 题目2. 解题1. 题目 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 …

配置快捷键让Total Commander跳转到某个目录

配置快捷键让Total Commander跳转到某个目录 无所不能的TC当然可以了。 原来我的需求是跳转到桌面&#xff0c;本来是有一个内部命令 em_OpenDesktop可以用的。但是这个命令在地址栏显示的结果是 \\桌面\&#xff0c;复制这个目录到别处的时候不能用。 因此我想配置为直接跳转到…

Redis-Scrapy分布式爬虫:当当网图书为例

Scrapy-Redis分布式策略&#xff1a; Scrapy_redis在scrapy的基础上实现了更多&#xff0c;更强大的功能&#xff0c;具体体现在&#xff1a; reqeust去重&#xff0c;爬虫持久化&#xff0c;和轻松实现分布式 假设有四台电脑&#xff1a;Windows 10、Mac OS X、Ubuntu 16.04、…