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实现多任务原理? 操作系统轮流让 ...
随机推荐
- POJ3616:Milking Time
Milking Time Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5682 Accepted: 2372 Desc ...
- maven启动报错No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building th ...
- Oracle 新建用户、赋予权限
1.新建用户 新建用户: create User username Identified by password 修改用户密码: alter User username Identified by p ...
- redis报错MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist
解决方法:通过redis-cli连接到服务器后执行以下命令: config set stop-writes-on-bgsave-error no 注意:这种方法只是忽略了问题,并没有解决问题,具体问题 ...
- 一百一十四、SAP查看事务代码对应工程源码
一.比如我们想看ZMMR008的源码,输入事务代码,点击显示 二.点击显示之后,在程序这儿,的双击打开 三.可以看到源码内容
- 四十、SAP中CASE语句用法
一.上代码 二.选择内容 三.输出 四.我们选择一个其他的值 五.查看输出
- RabbitMQ整合Spring Booot【消费者补偿幂等问题】
如果消费者 运行时候 报错了 package com.toov5.msg.SMS; import org.springframework.amqp.rabbit.annotation.RabbitHa ...
- Spark 2.x 在作业完成时却花费很长时间结束
使用 Apache Spark 2.x 的时候可能会遇到这种现象:虽然 Spark Jobs 已经全部完成了,但是程序却还在执行.比如我们使用 Spark SQL 去执行一些 SQL,这个 SQL 在 ...
- idea新建maven web项目
一.新建maven web项目 二.配置服务器 三.测试运行
- ssm搭建,maven,javaConfig
基于java配置SSM,eclipse 新建maven,web项目 .... 项目结构: jar包 pom.xml spring和DispatcherServlet上下文,相当于web.xml pub ...