python系统模块之re
正则模块re:
元字符:
字符 | 描述 |
. | 除换行符外的任意字符 |
\ | 转义字符 |
[...] | 字符集合,匹配任务其中一个 |
\d | 数字:[0-9] |
\D | 非数字:[^\d] |
\w | 单词字符[A-Za-z0-9] |
\W | 非单词字符[^\w] |
\s | 空白字符[\t\r\n\f 空格] |
\S | 非空白字符[^\s] |
数量词:
* | 匹配一个字符0次或多次 |
+ | 匹配一个字符1次或多次 |
? | 匹配一个字符0次或1次 |
{m} | 匹配一个字符m次 |
{m,n} | 匹配一个字符m次到n次 |
? | 非贪婪模式 |
边界:
^ | 匹配字符串开头和行首 |
$ | 匹配字符串结尾和行尾 |
\A | 匹配字符串开头 |
\Z | 匹配字符串结尾 |
\b | 匹配\w到\W之间 |
分组:
| | 左右表达式任意匹配一个,先匹配左边,一般成功则跳过匹配右边, 如果没有|则匹配整个表达式 |
(...) | 分组匹配,从左到右,没遇到一个编号就+1, 后面可以根据数量词提取内容 |
(?P<name>...) | 除了分组序号外, 还可以执行一个name的别名 |
\<number> |
引用编号为<number>的分组匹配到的字符串 |
(?P=name) | 引用别名为<name>的分组匹配到的串 |
常用函数:
1) compile(pattern)
创建正则匹配规则对象
- >>> import re
- >>> pat=re.compile('A')
- >>> m=pat.search('CBA')
- >>> print m
- <_sre.SRE_Match object at 0x9d690c8> #匹配到了,返回MatchObject(True)
- >>> m=pat.search('CBD')
- >>> print m
- None #没有匹配到,返回None(False)
- #上面的等价于
- >>> re.search('A','CBA')
- <_sre.SRE_Match object at 0xb72cd170>
- #推荐都用第一种方法
2)findall(pattern, string)
在字符串中查询所有匹配项,并以列表的形式返回
- >>> re.findall('a','ASDaDFGAa')
- ['a', 'a'] #列表形式返回匹配到的字符串
- >>> pat = re.compile('a')
- >>> pat.findall('ASDaDFGAa')
- ['a', 'a'] #列表形式返回匹配到的字符串
- >>> pat = re.compile('[A-Z]+') #正则匹配:'[A-Z]+' 后面有说明
- >>> pat.findall('ASDcDFGAa')
- ['ASD', 'DFGA'] #找到匹配到的字符串
- >>> pat = re.compile('[A-Z]')
- >>> pat.findall('ASDcDFGAa') #正则匹配:'[A-Z]+' 后面有说明
- ['A', 'S', 'D', 'D', 'F', 'G', 'A'] #找到匹配到的字符串
- >>> pat = re.compile('[A-Za-z]') #正则匹配:'[A-Za-z]+' 匹配所有单词,后面有说明
- >>> pat.findall('ASDcDFGAa')
- ['A', 'S', 'D', 'c', 'D', 'F', 'G', 'A', 'a']
3)search(pattern,string)
在字符串中查询第一个匹配项,并以对象的形式返回
- >>> m = re.search('asd','ASDasd')
- >>> print m
- <_sre.SRE_Match object at 0xb72cd6e8> #匹配到了,返回MatchObject(True)
- >>> m = re.search('asd','ASDASD')
- >>> print m
- None #没有匹配到,返回None(False)
4)match(pattern,string)
在字符串开始位置查询匹配项,并以对象的形式返回
- >>> m = re.match('a','Aasd')
- >>> print m
- None #没有匹配到,返回None(False
- >>> m = re.match('a','aASD')
- >>> print m
- <_sre.SRE_Match object at 0xb72cd6e8> #匹配到了,返回MatchObject(True)
- 可以用第一个方法:compile
- >>> pat=re.compile('a')
- >>> printpat.match('Aasd')
- None
- >>> printpat.match('aASD')
- <_sre.SRE_Match object at 0xb72cd6e8>
5)split(pattern,string)
在字符串中根据模式分隔字符串
- >>> re.split(',','a,s,d,asd')
- ['a', 's', 'd', 'asd'] #返回列表
- >>> pat = re.compile(',')
- >>> pat.split('a,s,d,asd')
- ['a', 's', 'd', 'asd'] #返回列表
- >>> re.split('[, ]+','a , s ,d ,,,,,asd') #正则匹配:[, ]+,后面说明
- ['a', 's', 'd', 'asd']
- >>> re.split('[, ]+','a , s ,d ,,,,,asd',maxsplit=2) # maxsplit 最多分割次数
- ['a', 's', 'd ,,,,,asd']
- >>> pat = re.compile('[, ]+') #正则匹配:[, ]+,后面说明
- >>> pat.split('a , s ,d ,,,,,asd',maxsplit=2) # maxsplit 最多分割次数
- ['a', 's', 'd ,,,,,asd']
6)sub(pattern,repl,string)
在字符串中将匹配项替换成目标,返回字符串
- >>> re.sub('a','A','abcasd') #找到a用A替换,后面见和group的配合使用
- 'AbcAsd'
- >>> pat = re.compile('a')
- >>> pat.sub('A','abcasd')
- 'AbcAsd'
- #通过组进行更新替换:
- >>> pat=re.compile(r'www\.(.*)\..{3}') #正则表达式
- >>> pat.match('www.dxy.com').group(1)
- 'dxy'
- >>> pat.sub(r'\1','hello,www.dxy.com') #通过正则匹配找到符合规则的”www.dxy.com“ ,取得组1字符串 去替换 整个匹配得到字符串。dxy -> www.dxy.com
- 'hello,dxy'
- >>> pat=re.compile(r'(\w+) (\w+)') #正则表达式
- >>> s='hello world ! hello hz !'
- >>> pat.findall('hello world ! hello hz !')
- [('hello', 'world'), ('hello', 'hz')]
- >>> pat.sub(r'\2 \1',s) #通过正则得到组1(hello),组2(world),再通过sub去替换。即组1替换组2,组2替换组1,调换位置。
- 'world hello!hz hello!'
7)escape(string)
特殊字符转移
- >>> re.escape('www.dxy.cn')
- 'www\\.dxy\\.cn' #转义
注意:
a) 以上函数中只有match,search返回的是一个对象, 可以使用span,group方法
- >>> pat = re.compile(r'www\.(.*)\.(.*)') #用()表示一个组,2个组
- >>> m = pat.match('www.dxy.com')
- >>> m.group() #默认为0,表示匹配整个字符串
- 'www.dxy.com'
- >>> m.group(1) #返回给定组1匹配的子字符串
- 'dxy'
- >>> m.group(2)
- 'com'
- >>> m.start(2) #组2开始的索引
- 8
- >>> m.end(2) #组2结束的索引
- 11
- >>> m.span(2) #组2开始、结束的索引
- (8, 11)
- >>> m1 = pat.search('www.dxy.com')
- >>> m1.group()
- 'www.dxy.com'
- >>> m1.group(1)
- 'dxy'
- >>> m1.group(2)
- 'com'
- >>> m1.start(2)
- 8
b)正则表达式内容的时候, 尽量前面添加r'表达式', 可以保证内容中的正则不会被python进行转移处理, 保持原始字符给到re引擎
使用示例:
python系统模块之re的更多相关文章
- python系统模块
Python中大多数系统接口都集中在两个模块:sys和os.这么说有点过于简单化 还有一些其他的表转模块也属于这个领域他们包括: glob 用于文件名的扩展 socket 用于网络连接和进程间通信(I ...
- Python系统模块os.py和sys.py常用函数
OS模块 os模块就是对操作系统进行操作,使用该模块必须先导入模块: import os #getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹) result = os.ge ...
- Python—系统模块(os和sys)
os模块 https://www.cnblogs.com/feifeifeisir/p/9519282.html sys模块 获取Python版本信息 import sys a = sys.versi ...
- python 系统模块 OS
os.system("系统命令") 调用系统命令 os.system("task kill /f /im 系统的进程") 关闭系统进程 os.listdir( ...
- Python OS模块标准库的系统接口及操作方法
Python OS模块标准库的系统接口及操作方法 os.name 返回当前操作系统名,定义了'posix','nt','mac','os2','ce','java'(我使用win7/python3.1 ...
- python一些模块的exe安装包在windows的64位系统里识别不到已安装Python目录的解决方法
在windows里安装python一些模块时候,有时候源码安装比较困难,pip install也各种报错,这时候最喜欢用别人编译好的exe或者whl文件来安装,但是在windows的64位系统里,如果 ...
- Python—day17时间模块、系统模块、递推遍历、序列化
一.time'''时间戳(timestamp):time.time()延迟线程的运行:time.sleep(secs)(指定时间戳下的)当前时区时间:time.localtime([secs])(指定 ...
- Python 常用系统模块整理
Python中的常用的系统模块中部分函数等的整理 random: 随机数 sys: 系统相关 os: 系统相关的 subprocess: 执行新的进程 multiprocessing: 进程相关 th ...
- python模块知识二 random -- 随机模块、序列化 、os模块、sys -- 系统模块
4.random -- 随机模块 a-z:97 ~ 122 A-Z :65 ~ 90 import random #浮点数 print(random.random())#0~1,不可指定 print( ...
- python常用标准库(os系统模块、shutil文件操作模块)
常用的标准库 系统模块 import os 系统模块用于对系统进行操作. 常用方法 os模块的常用方法有数十种之多,本文中只选出最常用的几种,其余的还有权限操作.文件的删除创建等详细资料可以参考官方文 ...
随机推荐
- windows server 2019 IIS网站属性上没有asp.net标签 ,aspnet_regiis -i 不能安装
在新的服务器版本已经不能通过 aspnet_regiis -i安装了,可以通过以下语句完成: dism /online /enable-feature /featurename:IIS-ASPNET4 ...
- 在 Web 中判断页面是不是刷新
在 Web 开发中,我们经常需要区分用户是否通过刷新操作重新加载了页面.这一操作可能是由用户手动刷新(如按下 F5 键或点击浏览器刷新按钮)或通过浏览器自动重新加载.判断页面是否刷新有助于开发者优化用 ...
- AI 视觉的应用|ZegoAvatar ⾯部表情随动技术解析
一.AI"卷"进实时互动 2021年,元宇宙概念席卷全球,国内各大厂加速赛道布局,通过元宇宙为不同的应用场景的相关内容生态进行赋能.针对"身份"." ...
- EF Core – Temporal Table 时态表
前言 EF core 6.0 开始有 build-in 的 Temporal Table 支持了. 关于 SQL Server Temporal Table 可以看这篇. 主要参考 What's Ne ...
- Go runtime 调度器精讲(六):非 main goroutine 运行
原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 在 Go runtime 调度器精讲(三):main goroutine 创建 介绍了 main goroutine 的创建,文中我们说 mai ...
- Go runtime 调度器精讲(十):异步抢占
原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 前面介绍了运行时间过长和系统调用引起的抢占,它们都属于协作式抢占.本讲会介绍基于信号的真抢占式调度. 在介绍真抢占式调度之前看下 Go 的两种抢 ...
- Linux操作系统和文件系统、常见命令(下)
C语言的绝大部分内容应该记录在以.c作为拓展名的文件里,这种文件叫做C语言的源文件 C语言程序里还包括以.h作为拓展名的文件,这种文件叫头文件(只有极少数的内容可以记录在头文件里) C语言程序里可以使 ...
- Outlook无法接收发送邮件,报错超出最大空间 的解决办法
事件起因: 某客户的outlook邮箱无法接收/发送邮件,报错为:存储区已达到最大大小 解决办法: 解决思路:新建一个数据文件来接收发送邮件 具体操作: 文件-账户配置-数据文件-新建(更 ...
- manim边学边做--无向图
无向图属于数学中的图论这一学科, 所谓无向图G,就是由顶点集V(非空集合)和边集E(由V中元素构成的无序二元组的集合)组成的图, 可表示为G=(V,E). 在无向图中,边没有方向,即从顶点A到顶点B的 ...
- iOS中委托使用小结
1.声明委托对象,并根据需要设置方法为可选还是必选,默认设置可选@optional @protocol CCHighSeasPoolDistributeDelegate <NSObject> ...