正则模块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)

创建正则匹配规则对象

  1. >>> import re
  2. >>> pat=re.compile('A')
  3. >>> m=pat.search('CBA')
  4. >>> print m
  5. <_sre.SRE_Match object at 0x9d690c8> #匹配到了,返回MatchObject(True)
  6.  
  7. >>> m=pat.search('CBD')
  8. >>> print m
  9. None #没有匹配到,返回None(False)
  10.  
  11. #上面的等价于
  12.  
  13. >>> re.search('A','CBA')
  14. <_sre.SRE_Match object at 0xb72cd170>
  15.  
  16. #推荐都用第一种方法

2)findall(pattern, string)

在字符串中查询所有匹配项,并以列表的形式返回

  1. >>> re.findall('a','ASDaDFGAa')
  2. ['a', 'a'] #列表形式返回匹配到的字符串
  3. >>> pat = re.compile('a')
  4. >>> pat.findall('ASDaDFGAa')
  5. ['a', 'a'] #列表形式返回匹配到的字符串
  6.  
  7. >>> pat = re.compile('[A-Z]+') #正则匹配:'[A-Z]+' 后面有说明
  8. >>> pat.findall('ASDcDFGAa')
  9. ['ASD', 'DFGA'] #找到匹配到的字符串
  10. >>> pat = re.compile('[A-Z]')
  11. >>> pat.findall('ASDcDFGAa') #正则匹配:'[A-Z]+' 后面有说明
  12. ['A', 'S', 'D', 'D', 'F', 'G', 'A'] #找到匹配到的字符串
  13.  
  14. >>> pat = re.compile('[A-Za-z]') #正则匹配:'[A-Za-z]+' 匹配所有单词,后面有说明
  15. >>> pat.findall('ASDcDFGAa')
  16. ['A', 'S', 'D', 'c', 'D', 'F', 'G', 'A', 'a']

3)search(pattern,string)

在字符串中查询第一个匹配项,并以对象的形式返回

  1. >>> m = re.search('asd','ASDasd')
  2. >>> print m
  3. <_sre.SRE_Match object at 0xb72cd6e8> #匹配到了,返回MatchObject(True)
  4. >>> m = re.search('asd','ASDASD')
  5. >>> print m
  6. None #没有匹配到,返回None(False)

4)match(pattern,string)

在字符串开始位置查询匹配项,并以对象的形式返回

  1. >>> m = re.match('a','Aasd')
  2. >>> print m
  3. None #没有匹配到,返回None(False
  4.  
  5. >>> m = re.match('a','aASD')
  6. >>> print m
  7. <_sre.SRE_Match object at 0xb72cd6e8> #匹配到了,返回MatchObject(True)
  8.  
  9. 可以用第一个方法:compile
  10.  
  11. >>> pat=re.compile('a')
  12. >>> printpat.match('Aasd')
  13. None
  14.  
  15. >>> printpat.match('aASD')
  16. <_sre.SRE_Match object at 0xb72cd6e8>

5)split(pattern,string)

在字符串中根据模式分隔字符串

  1. >>> re.split(',','a,s,d,asd')
  2. ['a', 's', 'd', 'asd'] #返回列表
  3. >>> pat = re.compile(',')
  4. >>> pat.split('a,s,d,asd')
  5. ['a', 's', 'd', 'asd'] #返回列表
  6.  
  7. >>> re.split('[, ]+','a , s ,d ,,,,,asd') #正则匹配:[, ]+,后面说明
  8. ['a', 's', 'd', 'asd']
  9. >>> re.split('[, ]+','a , s ,d ,,,,,asd',maxsplit=2) # maxsplit 最多分割次数
  10. ['a', 's', 'd ,,,,,asd']
  11. >>> pat = re.compile('[, ]+') #正则匹配:[, ]+,后面说明
  12. >>> pat.split('a , s ,d ,,,,,asd',maxsplit=2) # maxsplit 最多分割次数
  13. ['a', 's', 'd ,,,,,asd']

6)sub(pattern,repl,string)

在字符串中将匹配项替换成目标,返回字符串

  1. >>> re.sub('a','A','abcasd') #找到a用A替换,后面见和group的配合使用
  2. 'AbcAsd'
  3.  
  4. >>> pat = re.compile('a')
  5. >>> pat.sub('A','abcasd')
  6. 'AbcAsd'
  7.  
  8. #通过组进行更新替换:
  9. >>> pat=re.compile(r'www\.(.*)\..{3}') #正则表达式
  10. >>> pat.match('www.dxy.com').group(1)
  11. 'dxy'
  12. >>> pat.sub(r'\1','hello,www.dxy.com') #通过正则匹配找到符合规则的”www.dxy.com“ ,取得组1字符串 去替换 整个匹配得到字符串。dxy -> www.dxy.com
  13. 'hello,dxy'
  14.  
  15. >>> pat=re.compile(r'(\w+) (\w+)') #正则表达式
  16. >>> s='hello world ! hello hz !'
  17. >>> pat.findall('hello world ! hello hz !')
  18. [('hello', 'world'), ('hello', 'hz')]
  19. >>> pat.sub(r'\2 \1',s) #通过正则得到组1(hello),组2(world),再通过sub去替换。即组1替换组2,组2替换组1,调换位置。
  20. 'world hello!hz hello!'

7)escape(string)

特殊字符转移

  1. >>> re.escape('www.dxy.cn')
  2. 'www\\.dxy\\.cn' #转义

注意:

a) 以上函数中只有match,search返回的是一个对象, 可以使用span,group方法

  1. >>> pat = re.compile(r'www\.(.*)\.(.*)') #用()表示一个组,2个组
  2. >>> m = pat.match('www.dxy.com')
  3. >>> m.group() #默认为0,表示匹配整个字符串
  4. 'www.dxy.com'
  5. >>> m.group(1) #返回给定组1匹配的子字符串
  6. 'dxy'
  7. >>> m.group(2)
  8. 'com'
  9. >>> m.start(2) #组2开始的索引
  10. 8
  11. >>> m.end(2) #组2结束的索引
  12. 11
  13. >>> m.span(2) #组2开始、结束的索引
  14. (8, 11)
  15. >>> m1 = pat.search('www.dxy.com')
  16. >>> m1.group()
  17. 'www.dxy.com'
  18. >>> m1.group(1)
  19. 'dxy'
  20. >>> m1.group(2)
  21. 'com'
  22. >>> m1.start(2)
  23. 8

b)正则表达式内容的时候, 尽量前面添加r'表达式', 可以保证内容中的正则不会被python进行转移处理, 保持原始字符给到re引擎

使用示例:

python系统模块之re的更多相关文章

  1. python系统模块

    Python中大多数系统接口都集中在两个模块:sys和os.这么说有点过于简单化 还有一些其他的表转模块也属于这个领域他们包括: glob 用于文件名的扩展 socket 用于网络连接和进程间通信(I ...

  2. Python系统模块os.py和sys.py常用函数

    OS模块 os模块就是对操作系统进行操作,使用该模块必须先导入模块: import os #getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹) result = os.ge ...

  3. Python—系统模块(os和sys)

    os模块 https://www.cnblogs.com/feifeifeisir/p/9519282.html sys模块 获取Python版本信息 import sys a = sys.versi ...

  4. python 系统模块 OS

    os.system("系统命令")  调用系统命令 os.system("task kill /f /im 系统的进程") 关闭系统进程 os.listdir( ...

  5. Python OS模块标准库的系统接口及操作方法

    Python OS模块标准库的系统接口及操作方法 os.name 返回当前操作系统名,定义了'posix','nt','mac','os2','ce','java'(我使用win7/python3.1 ...

  6. python一些模块的exe安装包在windows的64位系统里识别不到已安装Python目录的解决方法

    在windows里安装python一些模块时候,有时候源码安装比较困难,pip install也各种报错,这时候最喜欢用别人编译好的exe或者whl文件来安装,但是在windows的64位系统里,如果 ...

  7. Python—day17时间模块、系统模块、递推遍历、序列化

    一.time'''时间戳(timestamp):time.time()延迟线程的运行:time.sleep(secs)(指定时间戳下的)当前时区时间:time.localtime([secs])(指定 ...

  8. Python 常用系统模块整理

    Python中的常用的系统模块中部分函数等的整理 random: 随机数 sys: 系统相关 os: 系统相关的 subprocess: 执行新的进程 multiprocessing: 进程相关 th ...

  9. python模块知识二 random -- 随机模块、序列化 、os模块、sys -- 系统模块

    4.random -- 随机模块 a-z:97 ~ 122 A-Z :65 ~ 90 import random #浮点数 print(random.random())#0~1,不可指定 print( ...

  10. python常用标准库(os系统模块、shutil文件操作模块)

    常用的标准库 系统模块 import os 系统模块用于对系统进行操作. 常用方法 os模块的常用方法有数十种之多,本文中只选出最常用的几种,其余的还有权限操作.文件的删除创建等详细资料可以参考官方文 ...

随机推荐

  1. windows server 2019 IIS网站属性上没有asp.net标签 ,aspnet_regiis -i 不能安装

    在新的服务器版本已经不能通过 aspnet_regiis -i安装了,可以通过以下语句完成: dism /online /enable-feature /featurename:IIS-ASPNET4 ...

  2. 在 Web 中判断页面是不是刷新

    在 Web 开发中,我们经常需要区分用户是否通过刷新操作重新加载了页面.这一操作可能是由用户手动刷新(如按下 F5 键或点击浏览器刷新按钮)或通过浏览器自动重新加载.判断页面是否刷新有助于开发者优化用 ...

  3. AI 视觉的应用|ZegoAvatar ⾯部表情随动技术解析

    ​ 一.AI"卷"进实时互动 2021年,元宇宙概念席卷全球,国内各大厂加速赛道布局,通过元宇宙为不同的应用场景的相关内容生态进行赋能.针对"身份"." ...

  4. EF Core – Temporal Table 时态表

    前言 EF core 6.0 开始有 build-in 的 Temporal Table 支持了. 关于 SQL Server Temporal Table 可以看这篇. 主要参考 What's Ne ...

  5. Go runtime 调度器精讲(六):非 main goroutine 运行

    原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 在 Go runtime 调度器精讲(三):main goroutine 创建 介绍了 main goroutine 的创建,文中我们说 mai ...

  6. Go runtime 调度器精讲(十):异步抢占

    原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 前面介绍了运行时间过长和系统调用引起的抢占,它们都属于协作式抢占.本讲会介绍基于信号的真抢占式调度. 在介绍真抢占式调度之前看下 Go 的两种抢 ...

  7. Linux操作系统和文件系统、常见命令(下)

    C语言的绝大部分内容应该记录在以.c作为拓展名的文件里,这种文件叫做C语言的源文件 C语言程序里还包括以.h作为拓展名的文件,这种文件叫头文件(只有极少数的内容可以记录在头文件里) C语言程序里可以使 ...

  8. Outlook无法接收发送邮件,报错超出最大空间 的解决办法

    事件起因: 某客户的outlook邮箱无法接收/发送邮件,报错为:存储区已达到最大大小     解决办法: 解决思路:新建一个数据文件来接收发送邮件   具体操作: 文件-账户配置-数据文件-新建(更 ...

  9. manim边学边做--无向图

    无向图属于数学中的图论这一学科, 所谓无向图G,就是由顶点集V(非空集合)和边集E(由V中元素构成的无序二元组的集合)组成的图, 可表示为G=(V,E). 在无向图中,边没有方向,即从顶点A到顶点B的 ...

  10. iOS中委托使用小结

    1.声明委托对象,并根据需要设置方法为可选还是必选,默认设置可选@optional @protocol CCHighSeasPoolDistributeDelegate <NSObject> ...