Python笔记_第四篇_高阶编程_正则表达式_3.正则表达式深入
1. re.split
正则的字符串切割
str1 = "Thomas is a good man"
print(re.split(r" +",str1)) # " +" :至少一个是空格
# ['Thomas', 'is', 'a', 'good', 'man']
2. finditer函数:
原型:re.findinter(pattern,string,flags=0)
参数:
pattern:要匹配的正则表达式
strings:要匹配的字符串
flags:标志位:用于控制正则表达式的匹配方式,是对pattern的一种辅助,如下:
re.I:忽略大小写
re.L:做本地化识别
re.M:多行匹配,影响^和$
re.S:使.(点)匹配包括换行符在内的所有字符
re.U:根据Unicode字符集解析字符,影响\w \W \b \B
re.X:以更灵活的格式理解正则表达式
功能:与findall类似,扫描整个字符串,返回的是一个迭代器。
str2 = "Thomas is a good man! Thomas is a nice man! Thomas is a handsome man"
d = re.finditer(r"(Thomas)",str2)
while True:
try:
l = next(d)
print(l)
except StopIteration as e:
break
# <re.Match object; span=(, ), match='Thomas'>
# <re.Match object; span=(, ), match='Thomas'>
# <re.Match object; span=(, ), match='Thomas'>
3. re.sub() / re.subn():
原型:
sub(pattern,reple,string,count=0,flags=0)
subn(pattern,reple,string,count=0,flags=0)
参数:
pattern:匹配的正则表达式
reple:指定的用来替换的字符串
string:目标字符串
count:最多替换次数
flags:标志位,用于控制正则表达式的匹配方式,是对pattern的一种辅助,值如下:
re.I:忽略大小写
re.L:做本地化识别的
re.M:多行匹配,影响^和$
re.S:使.匹配包括换行符在内的所有字符
re.U:根据Unicode字符集解析字符,影响\w \W \b \B
re.X:以更灵活的格式理解正则表达式
功能:在目标字符串中,以正则表达式的规则匹配字符串,再把他们替换成指定的字符串。可以指定替换的次数,如果不指定,它会替换所有的匹配字符串。
区别:前者返回一个呗替换的字符串,后者返回一个字符串,第一个元素呗替换的字符串,第二个元素表示被替换的次数。
# sub替换
str4 = "Thomas is a good good good man"
res = re.sub(r"(good)","nice",str4)
print(res)
print(type(res))
# Thomas is a nice nice nice man
# <class 'str'> #指定匹配次数
str5 = "Thomas is a good good good man"
res1 = re.sub(r"(good)","nice",str5,count=)
print(res1)
print(type(res1))
# Thomas is a nice nice good man
# <class 'str'> #subn替换
str6 = "Thomas is a good good good man"
res2 = re.subn(r"(good)","nice",str6)
print(res2)
print(type(res2))
# ('Thomas is a nice nice nice man', )
# <class 'tuple'>
4. 分组:
除了简单的判断是否匹配之外,正则表达式还有提取子串的功能。用()来表示分组,整个分组是提取出来的分组。
group():表示按第几个位置提取
groups():表示提取全部
# 查看组信息
str7 = "010-53247654"
m = re.match(r"(\d{3})-(\d{8})",str7)
# 使用序号获取对应组的信息,group()一直代表的原始字符串
print(m.group())
print(m.group())
print(m.group())
# -
#
# # 查看匹配的各组的情况,从外头一组一组的显示
m1 = re.match(r"((\d{3})-(\d{8}))",str7)
print(m1.groups())
# ('010-53247654', '', '') # 给组起名
m2 = re.match(r"(?P<first>\d{3})-(?P<second>\d{8})",str7)
print(m2.group("first"))
print(m2.group("second"))
#
#
备注:另外我们可以看到我们还可以通过?P<>的方式对分组的部分进行编号。
5. 编译:
当我们正在使用正则表达式时,re模块会干两件事:
第一:编译正则表达式,如果正则表达式本身不合法,会报错。
第二:编译后的正则表达式去匹配对象。
re.compile(pattern,flags=0)
pattern:表示要编译的正则表达式
flags:同上
pat = r"^1(([34578]\d)|(47))\d{8}$"
print(re.match(pat,""))
re_telephon = re.compile(pat)
print(re_telephon.match(""))
# <re.Match object; span=(, ), match=''>
# <re.Match object; span=(, ), match=''>
Python笔记_第四篇_高阶编程_正则表达式_3.正则表达式深入的更多相关文章
- Python笔记_第四篇_高阶编程_进程、线程、协程_5.GPU加速
Numba:高性能计算的高生产率 在这篇文章中,笔者将向你介绍一个来自Anaconda的Python编译器Numba,它可以在CUDA-capable GPU或多核cpu上编译Python代码.Pyt ...
- Python开发【第十三篇】高阶函数、递归函数、闭包
函数式编程是指用一系列函数解决问题 好处:用每个函数完成每个细小的功能,一系列函数任意组合能够解决大问题 函数仅仅接收输入并产生输出,不包含任何能影响输出的内部状态 函数之间的可重入性 当一个函数的输 ...
- python学习三十四天函数高阶函数定义及用法
python函数高阶函数是把函数当成一个变量,传递给函数作为参数,或者函数的返回值里面有函数,都称为高阶函数, 1,把函数作为参数传递 def dac(x,y): return x+y def tes ...
- Python笔记_第四篇_高阶编程_实例化方法、静态方法、类方法和属性方法概念的解析。
1.先叙述静态方法: 我们知道Python调用类的方法的时候都要进行一个实例化的处理.在面向对象中,一把存在静态类,静态方法,动态类.动态方法等乱七八糟的这么一些叫法.其实这些东西看起来抽象,但是很好 ...
- Python笔记_第四篇_高阶编程_魔法(术)方法详解(重载的再详解)
1. 魔法方法是什么? 魔法方法(Magic Method)是Python比较独特的应用,它可以给你的类增加特殊的方法,如果你的对象实现了(重载),这些方法中的某一个,就会被Python所调用.正如装 ...
- Python笔记_第四篇_高阶编程_再议装饰器和再议内置函数
1. 概述: 我们在前面用了很多的装饰器这个工具的方法.这个位置要系统的讲一下装饰器. 1.2 为什么需要装饰器. 装饰器本质是一个Python函数,它可以让其他函数在不需要任何代码变动的前提下增加额 ...
- Python笔记_第四篇_高阶编程_正则表达式_2.正则表达式入门
1. 匹配单个字符和数字: . --->> 匹配除换行符以外的任意字符.[0123456789] --->> []字符集合,表示匹配方括号中所包含的任意一个字符.[Thomas ...
- Python笔记_第四篇_高阶编程_进程、线程、协程_4.协程
1.协程的概念: 子程序或者子函数,在所有语言中都是层级调用,比如A调用B,再B执行的过程中又可以调用C,C执行完毕返回,B执行返回,最后是A执行完毕返回.是通过栈来实现的,一个线程就是执行一个自称, ...
- Python笔记_第四篇_高阶编程_进程、线程、协程_3.进程vs线程
1.多任务的实现原理: 通常我们会设计Mater-Workder模式,Master负责分配任务,Worker负责执行任务,因此多任务环境下,通常是一个Master,多个Worker 2.多进程: 主进 ...
- Python笔记_第四篇_高阶编程_进程、线程、协程_1.进程
1. 多任务原理: 现代操作系统,像win,max os x,linux,unix等都支持多任务. * 什么叫做多任务? 操作系统可以同时运行多个任务. * 单核CPU实现多任务原理? 操作系统轮流让 ...
随机推荐
- Ubuntu上安装tftp服务
1. 安装 sudo apt install tftpd-hpa 2.设置工作目录 mkdir ~/tftpdroot tftpdroot 3.修改配置文件 sudo vi /etc/default/ ...
- 【LeetCode】反转字符串
[问题] 编写一个函数,其作用是将输入的字符串反转过来. 示例 : 输入: "hello" 输出: "olleh" 示例 : 输入: "A man, ...
- Java并发读书笔记:线程通信之等待通知机制
目录 synchronized 与 volatile 等待/通知机制 等待 通知 面试常问的几个问题 sleep方法和wait方法的区别 关于放弃对象监视器 在并发编程中,保证线程同步,从而实现线程之 ...
- Vulkan SDK之 FrameBuffer
The Vulkan Framebuffer Framebuffers represent a collection of memory attachments that are used by a ...
- 【转载】redis.windows.conf 参数说明
1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/ru ...
- 十四、JavaScript之不同类型变量相加
一.代码如下 二.效果如下 <!DOCTYPE html> <html> <meta http-equiv="Content-Type" conten ...
- 四十九、在SAP中查看程序资源结构对象
一.在屏幕上点击这个品图标,相关说明如下图 二.使用这个程序资源结构对象可以很方便的定位
- Swift 访问权限
internal 内部的 1.默认情况下所有的类&属性&方法的访问权限都是internal 2.在本模块(项目/包/target)中可以访问 private 私有的 1.只有在本类中访 ...
- Vim中的基本操作
Vim中的基本操作 vim介绍.实验知识点.Vim中的六种基本模式 2.1 vim 6种模式介绍 从vi衍生出来的Vim具有多种模式,这种独特的设计容易使初学者产生混淆.几乎所有的编辑器都会有插入和执 ...
- 编程入门-Eclipse项目导出和导入
编程入门-Eclipse项目导出和导入 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.导出项目 1>.如下图所示,在项目目录上右击鼠标,依次点击"Export& ...