Python正则表达中re模块的使用
作者:过期的秋刀鱼-_ 发布时间:2023-10-11 03:38:22
标签:Python,正则,表达式,re模块
01、正则表达式
学习正则表达式操作字符串,re模块是用C语言写的没匹配速度非常快,其中compile函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象,该对象拥有一系列方法用于正则表大会匹配和替换,re模块也提供了与这下方 * 能完全一致的函数,这些函数适用一个模式字符串做为他们的第一个参数
re.macth方法:re.math 尝试从字符串起始位置匹配,返回match对象,,否则返回None,适用group()获取匹配成功的字符串
语法:re.match(pattern,string,flags)
参数描述pattern匹配的正则表达式string要匹配的字符串flags标志位,用于控制正则表达式的匹配方式:如:是否匹配大小写,多行匹配
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串 |
flags | 标志位,用于控制正则表达式的匹配方式:如:是否匹配大小写,多行匹配 |
import re
str='Python is the best language in the world'
result= re.match('P',str)
print(type(result))#<class 're.Match'>
print(result.group())
标志位:如果使用多个标志位,使用|分割,如:re.I|re.M
修饰符 | 描述 |
---|---|
re.I | 适匹配对大小写不敏感 |
re.L | 做本地化识别匹配 |
re.M | 多行匹配,影响^ 和$ |
re.S | 使.匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符,这个标志影响\w,\W ,\b,\B |
re.X | 该标识符通过给予你更灵活的格式以便于你将正则表达式写得更易于理解。 |
import re
strData='Python is the best language in the world\
gslfjgldsjgls'
#result= re.match('p',strData,re.I|re.M)#第三个参数 忽略大小写
#print(type(result))#<class 're.Match'>
#print(result.group())
res=re.match('(.*?)is(.*?)',strData,re.I)
print(res.group(1))
print(res.group(2))
常用匹配规则:
符号 | 匹配规则 |
---|---|
.(点) | 匹配任意1个字符除了换行符 |
[abc] | 匹配abc中任意一个 |
\d | 匹配一个数字0-9 |
\D | 匹配非数字 |
\s | 匹配空白 即空格 tab键 |
\S | 匹配非空格 |
\w | 匹配单词字符 即a-z A-Z 0-9 _ |
\W | 匹配非单词字符 |
匹配字符数量:
符号 | 匹配规则 |
---|---|
* | 匹配前一个字符出现0次或者无限次,即可有可无 |
+ | 匹配前一个字符出现1次或者无限次,即至少有1次 |
? | 匹配前一个字符出现1次或者0次,即要么有1次要么没有 |
{m} | 匹配前一个字符出现m次 |
{m,} | 匹配前一个字符至少出现m次 |
{m,n} | 匹配前一个字符出现从m次到n次 |
1.1、限定匹配数量规则
import re
# * 匹配前一个字符出现0次或者无限次
res=re.match('[a-z][a-z]*','MyPython',re.I)
print(res.group())
# + 匹配前一个字符1次或者无限次 至少一次
res=re.match('[a-zA-Z]+[\w]*','mynAMEDCeisz848s_')
print(res.group())
# ? 匹配前一个字符0次或者1次
res=re.match('[a-zA-Z]+[\d]?','mkohjhjgu8jg8')
print(res.group())
# {min,max} 匹配前一个从min到max次 min max必须是非负整数
#{count}精确匹配次数 {count,}没有限制
res=re.match('\d{4,}','46145')
if res:
print('匹配成功{}'.format(res.group()))
#匹配邮箱 格式:xxxxxx@163.com
res=re.match('[a-zA-Z0-9]{6,11}@163.com','318129549@163.com')
print(res.group())
1.2、原生字符串
# path="D:\\1_zhao_File\\1_MarkDown\MarkDown学习使用篇"
# print(path )
import re
#原生字符串 r
print(re.match(r'c:\\a.text','c:\\a.text').group())
#匹配开头结尾
#^ 匹配字符串开头
#$ 匹配字符串结尾
# res=re.match('^p.*','python is language')
res=re.match('^p[\w]{5}','python is language')
print(res.group())
res=re.match('[\w]{5,15}@[\w]{2,5}.com$','318129549@qq.com')
print(res.group())
1.3、分组匹配
# | 匹配左右任意一个表达式 从左往右
import re
res=re.match('[\w]*|100','100')
print(res.group())
# (ab)分组匹配 将括号中字符作为一个分组
res=re.match('([0-9]*)-(\d*)','123456-464651561')
print(res.group())
print(res.group(1))
print(res.group(2))
# \num 的使用
# htmlTag='<html><h1>Python核心编程</h1></html>'
# res1=re.match(r'<(.+)>(.+)>(.+)</\2></\1>',htmlTag)
# print(res1.group(1))
# 分组 别名的使用 (?P<名字>)
data='<div><h1>www.baidu.com</h1></div>'
res=re.match(r'<(?P<div>\w*)><(?P<h1>\w*)>(?P<data>.*)</\w*></\w*>',data)
print(res.group())
1.4、编译函数compile
# re.compile 方法
'''
compile将正则表达式模式编译成一个正则表达式对象
reg=re.compile(pattern)
result=reg.match(string)
等效于result=re.match(pattern,string)
使用re.compile和保持所产生的正则表达式对象重用效率更高
'''
import re
#compile 可以把字符串编译成字节码
#优点:在使用正则表达式进行match时,python会将字符串转为正则表达式对象
# 而如果使用compile,只需要转换一次即可,以后在使用模式对象的话无需重复转换
data='1364'
pattern=re.compile('.*')
#使用pattern对象
res=pattern.match(data)
print(res.group())
#re.search方法
#search在全文中匹配一次,匹配到就返回
data='我爱我伟大的祖国,I love China,China is a great country'
rees=re.search('China',data)
print(rees)
print(rees.span())
print(rees.group())
# print(data[21])
#re.findall方法 匹配所有,返回一个列表,
data='华为牛逼是华人的骄傲'
# res =re.findall('华.',data)
# print(res)
pattern=re.compile('华.')
res=pattern.findall(data)
print(res)
# re.sub方法 实现目标搜索和替换
data1='Pythons是很受欢迎的编程语言'
pattern='[a-zA-Z]+' #字符集范围 +代表 前导字符模式出现1从以上
res=re.sub(pattern,'C#',data1)
resn=re.subn(pattern,'C#',data1)
print(res)
print(resn)
#re.subn 完成目标的的搜索和替换 还返回被替换的数量,以元组的形式返回
#re.split 是新分割字符串
data='百度,腾讯,阿里,华为,360,字节跳动'
print(re.split(',',data))
1.5贪婪模式和非贪婪模式
'''
python 中默认是贪婪的,总是贪婪的匹配尽可能多的字符,非贪婪相反,总是尝试匹配尽可能少的字符
在 ” * ? + {m,n}"后面加上 ? 使贪婪变成非贪婪
'''
#贪婪
import re
res=re.match('[\d]{6,9}','111222333')
print(res.group())
#非贪婪
res=re.match('[\d]{6,9}?','111222333')
print(res.group())
content='asdfbsdbdsabsd'
# pattern=re.compile('a.*b')# 贪婪
pattern=re.compile('a.*?b')#非贪婪
res=pattern.search(content)
print(res.group())
#0710-49
来源:https://blog.csdn.net/ZhaoSong_/article/details/126669413 502


猜你喜欢
- python中字典可以一键多值,也就是意味着一个键可以对应多个值。例:#encoding=utf-8print '中国'#字
- 卸载旧版本的MySQL(没有就跳过此步骤)(注:3-6步 重新安装新版本的MySQL,一定要把之前版本卸载干净,要不会出错;新的虚拟机初装M
- 本文实例讲述了JavaScript设计模式之享元模式。分享给大家供大家参考,具体如下:通过两个例子的对比来凸显享元模式的特点:享元模式是一个
- 本文实例讲述了JS实现不规则TAB选项卡效果代码。分享给大家供大家参考。具体如下:这是一款不规则TAB选项卡效果,将中规中矩的方角换成了不规
- 在LintCode上练习遇到这个问题,查阅资料找到多种方法,总结如下。输入输出123321第一种:整数方法取余取整实现class Solut
- ASP中转换unicode编码为GB编码方法:<% function urldecode(encodestr)
- 为什么会有这个需求呢?有没有发现在国外的一些网站,当你向上滚动时,导航条浮动在顶部位置。用户如果是想看内容就可以直接点击到达,省去很多拖动的
- 本文实例讲述了Python实现求两个数组交集的方法。分享给大家供大家参考,具体如下:一、题目给定两个数组,编写一个函数来计算它们的交集。例1
- 刚好前些天有人提到eval()与exec()这两个函数,所以就翻了下Python的文档。这里就来简单说一下这两个函数以及与它们相关的几个函数
- 在Python中使用字典,格式如下:dict={ key1:value1 , key2;value2 ...}在实际访问字典值时的使用格式如
- 前言前面介绍了Allure报告,本篇来学习普通的HTML如何展示在Jenkins上安装插件Manage Jenkins --> Man
- 多版本并发控制Multiversion Concurrency Control大部分的MySQL的存储 引擎,比如InnoDB,Falcon
- 本文实例讲述了python判断windows系统是32位还是64位的方法。分享给大家供大家参考。具体分析如下:通常64的windows系统p
- 此文章主要向大家描述的是Java连接MYSQL 数据库(以MySQL为例)的实际操作步骤,我们是以相关实例的方式来引出Java连接MYSQL
- PDO::_constructPDO::_construct — 创建一个表示数据库连接的 PDO 实例(PHP 5 >= 5.1.0
- 数据结构树简介一、树简介树(Tree)是一种抽象的数据结构,是一个数据的集合,集合中的数据组成了一个树状结构。例如上图,看起来像一棵倒挂的树
- 环境配置系统:Windows10版本:python 3.8Turtle扫盲1.绘图窗体的设置turtle.setup(width, heig
- 一、Python开机自动运行假如Python自启动脚本为 auto.py 。那么用root权限编辑以下文件:sudo vim /etc/rc
- 本文实例讲述了php自定义函数实现二维数组按指定key排序的方法。分享给大家供大家参考,具体如下:二维数组官方的排序方法并不好,该函数可以进
- 使用python filecmp模块的dircmp类可以很方便的比对两个目录,dircmp的用法已经有很多文章介绍,不再赘述。可以help(