还没搞懂正则?熬夜到虚脱整理出来的Python的正则表达式总结(Regular Expression)
前言:
作者:神的孩子在歌唱
这是我听老师讲课做的笔记
大家好,我叫陈运智,大家可以叫我智
正则表达式
- 一. python正则表达式介绍
- 二. re模块
- 2.1 match方法
- 2.2 匹配规则
- 2.2.1 匹配字符
- 2.2.2 分组匹配
- 2.2.3 限定匹配字符规则
- 2.2.4 转义字符
- 三. re中的编译函数
- 3.1 compile方法
- 3.2 search方法
- 3.3 finall方法
- 3.4 sub方法
- 3.5 split方法
- 四. 贪婪模式与非贪婪模式
一. python正则表达式介绍
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。
re 模块使 Python 语言拥有全部的正则表达式功能。
compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。
re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。
二. re模块
2.1 match方法
re.match 尝试从字符串的起始位置匹配一个规则,匹配成功就返回match对象,否则返回
None
。可以使用group()
获取匹配成功的字符串。
- 语法:
re.match(pattern, string, flags=0)
- 参数说明:
pattern | 匹配的正则表达式 |
---|---|
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 |
- 我们可以使用
group(num)
或groups()
匹配对象函数来获取匹配表达式。
group(num=0) | 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 |
---|---|
groups() | 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 |
- 代码演示
'''
修饰符 描述
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
'''
输出:
2.2 匹配规则
2.2.1 匹配字符
符号 | 匹配规则 |
---|---|
.(点) | 匹配任意1个字符除了换行符\n |
[abc ] | 匹配abc中的任意一个字符 |
\d | 匹配一个数字,即0-9 |
\D | 匹配非数字,即不是数字 |
\s | 匹配空白,即空格,tab键 |
\S | 匹配非空白,除空格,tab键之类的 |
\w | 匹配单词字符,即a-z、A-Z、0-9、_ |
\W | 匹配非单词字符 |
.
点的使用,匹配除了换行符之外的任意一个字符字符,还可以.*
输出后面的字符串
import re
data='python'
parrtern='..'#匹配规则,这里匹配两个字符
res=re.match(parrtern,data)
print(res.group())#输出:py
'''测试二'''
names='运智在学习python','运气','换人'
pattern='运.'#匹配规则:会匹配运开头的
for item in names:chen=re.match(pattern,item)if chen:print(chen.group())#输出运智,运气
输出:
2. []
中括号:匹配中括号中的任意一个字符,
str1='hello'
res=re.match('[he]',str1)
print(res.group())#输出:h
2.2.2 分组匹配
符号 | 匹配规则 |
---|---|
| | 匹配左右任意一个表达式 |
(ab) | 将括号中字符作为一个分组 |
\num | 引用分组num匹配到的字符串 |
(?P) | 分组起别名 |
(?P=name) | 引用别名为name分组匹配到的字符串 |
代码按例:
2.2.3 限定匹配字符规则
原理:就是匹配数量
符号 | 匹配规则 |
---|---|
* | 匹配前一个字符出现0次或者无限次,即可有可无 |
+ | 匹配前一个字符出现1次或者无限次,即至少有1次 |
? | 匹配前一个字符出现1次或者0次,即要么有1次,要么没有 |
{m} | 匹配前一个字符出现m次 |
{m,} | 匹配前一个字符至少出现m次 |
{n,m} | 匹配前一个字符出现从n到m次 |
*
匹配前一个字符出现0次或者无限次,即可有可无
代码:
res=re.match('[A-Z]*','Cy')#匹配0次
print(res.group())#C
res=re.match('[A-Z][a-z]*','Che')#也可以写成" [A-Za-z]* "
print(res.group())
# re.match('[a-zA-Z]+[\w]*','na99m_e')
#re.match('\d{4}','1234')#精确匹配
输出:
2. 代码按例匹配邮箱
regexMail=re.match('[a-zA-Z0-9]{6,11}@qq.com','chenyunzhi@qq.com')
if regexMail:print('匹配成功{}'.format(regexMail.group()))pass
输出:
2.2.4 转义字符
符号 | 匹配规则 |
---|---|
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
import re
# 在正则前加r,表示原生字符串,python字符串不转义 或者直接\\\\a。
print(re.match(r'c:\\a.txt','c:\\a.txt').group())#c:\a.txtdt='python is chen'
result=re.match('^p.*',dt)#开头是对的就输出
chen=re.match('^p\w{5}',dt)
End=re.match('\w{5,12}@[\w]{1,9}.\w{3}$','chenyunzhi@qq.com')
if result:print(result.group())#python is chenprint(chen.group())#pythonprint(End.group())#chenyunzhi@qq.com
输出:
三. re中的编译函数
3.1 compile方法
compile
可以把一个字符串编译成字节码- 优点:在使用正则表达式进行match的操作时,python会将字符串转为正则表达式对象,
- 而如果使用
compile
只需要一次转换,以后再使用模式对象的话 无需转换
import re
rs=re.compile('\w.*')
res=rs.match('chenyunzhi')
print(res.group())#输出:chenyunzhi
3.2 search方法
search
:在全文中匹配一次,匹配到就返回- 语法:
re.search(pattern, string, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 |
- 代码
'''
print(re.search('python','人生苦短,我用python').group())
#输出:python
3.3 finall方法
finall()
:查询字符串中某个正则表达式全部的非重复出现的情况 返回是一个符合正则表达式的结果列表- 语法:
findall(string[, pos[, endpos]])
参数 | 描述 |
---|---|
string | 待匹配的字符串。 |
pos | 可选参数,指定字符串的起始位置,默认为 0。 |
endpos | 可选参数,指定字符串的结束位置,默认为字符串的长度。 |
3.代码
print(re.findall('p','python的开头是p'))#输出:['p', 'p']
小结:search找到就返回,finall全部找到才返回
3.4 sub方法
sub
:将匹配到的数据进行替换,实现目标的搜索和查找- 语法:
sub(pattern, repl, string, count=0, flags=0)
参数 | 描述 |
---|---|
pattern | 正则中的模式字符串。 |
repl | 替换的字符串,也可为一个函数。 |
string | 要被查找替换的原始字符串。 |
count | 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。 |
flags | 标志位,用于控制正则表达式的匹配方式 |
- 代码
输出:
3.5 split方法
- split:实现分割字符串,以列表形式返回
- 语法:
split(pattern, string, maxsplit=0, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
maxsplit | 分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。 |
flags | 标志位,用于控制正则表达式的匹配方式 |
print(re.split(',','chen,yun,zhi'))#输出:['chen', 'yun', 'zhi']
四. 贪婪模式与非贪婪模式
默认条件下为贪婪模式
- 贪婪:在满足条件情况下尽可能匹配到数据
- 非贪婪:满足条件就可以,在
"*","?","+","{m,n}"
后面加上?
,就能将贪婪变成非贪婪.
代码
#贪婪模式
pattern=re.compile('a.*b')
result=pattern.search('abcabcd')
print(result.group())#abcab#非贪婪
pattern=re.compile('a.*?b')
result=pattern.search('abcabcd')
print(result.group())#ab
输出:
abcab
ab
上面可以看出,贪婪模式要匹配到最后一个b才停止,然而非贪婪模式匹配到第一个b就停止了
本人博客:https://blog.csdn.net/weixin_46654114
转载说明:跟我说明,务必注明来源,附带本人博客连接。
请给我点个赞鼓励我吧
还没搞懂正则?熬夜到虚脱整理出来的Python的正则表达式总结(Regular Expression)相关推荐
- 升级过log4j,却还没搞懂log4j漏洞的本质?
摘要:log4j远程代码漏洞问题被大范围曝光后已经有一段时间了,今天完整讲清JNDI和RMI以及该漏洞的深层原因. 本文分享自华为云社区<升级过log4j,却还没搞懂log4j漏洞的本质?为你完 ...
- 你还没搞懂的微信小程序,已成今年双十一电商黑马
阿里今年双十一成交额达1682亿.京东11天的下单额达1271亿,各大财经媒体都在纷纷报道双十一全国各网上平台今年的创收,这些每年都在几十个百分点成长的数据无不让实体的各位老板瞠目结舌:然而还有一个很 ...
- 量子计算还没搞懂,光子计算又要来统治世界?
[CSDN 编者按]去年 12 月,量子计算原型机"九章" 惊人的单项计算能力超过了 Google 当年水平,国人自己也手握一份"量子霸权",新年伊始,两篇关于 ...
- char类型怎么输入 c语言_还没搞懂C语言指针?这里有最详细的纯干货讲解(附代码)...
21ic综合自网络信息 指针对于C来说太重要.然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识.所以本文尽可能的通过一篇文章完全讲解指针. 为什么 ...
- c语言指针f32*,还没搞懂C语言指针?这里有最详细的纯干货讲解(附代码)
21ic综合自网络信息 指针对于C来说太重要.然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识.所以本文尽可能的通过一篇文章完全讲解指针. 为什么 ...
- 针对还没搞懂javascript中this关键字的同学
本篇文章主要针对搞不清this指向的的同学们!不定期更新文章都是我学习过程中积累下的经验,还请大家多多关注我的文章以帮助更多的同学,不对的地方还望留言支持改进! 首先,必须搞清楚在JS里面,函数的几种 ...
- java8的LocalDateTime还没搞懂?一文轻松解决掉你的烦恼
1. 一定要将自己的研究成果首发到我自己的博客上 这段时间换工作,新的公司用java8语法糖用的很多,上周开发一个需求,用到时间计算,因为这个时间计算,搞了两个小时...深感惭愧 java都出到17了 ...
- 还没搞懂串口通信?一文带你读懂
点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达! 还记得当年的打印机,鼠标和调制解调器吗?他们都有巨大笨重的连接器和粗电缆,并且必须拧 ...
- c语言的真假,C语言丨还没搞懂逻辑运算符?一篇文章教你区分“真假”!
这两天有遇到一些小伙伴,对于逻辑运算符号都不认识,不知道它代表什么意思,今天就来简单讲讲逻辑运算符. 逻辑运算符 关系运算符只是测试左右两个值之间的关系(把它们相互比较),逻辑运算符(logical ...
最新文章
- 使用 .NET 框架轻松开发完美的 Web 窗体控件
- 干货丨一文看懂人工智能、机器学习和深度学习的区别与联系
- 微信小程序把玩(二十七)audio组件
- 漫谈词向量之基于Softmax与Sampling的方法
- Python基础练习题,你会吗?
- PHP判断是否为手机客户端
- IBM X系列服务器IMM日志采集
- TikZ绘图示例——尺规作图: 椭圆的近似画法
- 使用ABAP Push Channel(APC)开发的乒乓球游戏,可双打 1
- input 模糊匹配功能 文本框模糊匹配(纯html+jquery简单实现) demo
- Linux 常用命令如何使用?
- CentOS 关闭蜂鸣器声音
- 【转载】快速掌握一个语言最常用的50%
- html语言怎么修改form边框,form表单样式案例 定义html表单细边框样式
- 2022: Python下载安装教程
- “华为”云桌面终端CT3200+显示器、键盘和鼠标
- JavaScript实现的躲避球小游戏
- Android 动态修改app名称(市场和手机中显示两个不同的名称)
- 信息收集之外网信息收集
- android-support-percent的学习使用笔记
热门文章
- 华为路由器开启ftp出现530错误
- 百度凤巢计划,中华英才网有点烦
- Exception in thread' main” java. 1ang. Runt imeException: Error while running command to get file pe
- 大二逃课总结的1.2w字的计算机网络知识!扫盲!
- 计算机硬件的联通,联通4g支撑系统介绍_计算机硬件及收集_it计算机_专业资料[精彩].ppt...
- 12290890329_软成3班廖炯雄第一次做业
- 2020届c++工程师求职准备——计划篇(2019.03.05.)
- 数组反转(倒叙)输出四种方法
- ts没有与此调用匹配的重载
- 国内奇葩小学数学题横扫推特,老外被难哭了