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.正则表达式深入的更多相关文章

  1. Python笔记_第四篇_高阶编程_进程、线程、协程_5.GPU加速

    Numba:高性能计算的高生产率 在这篇文章中,笔者将向你介绍一个来自Anaconda的Python编译器Numba,它可以在CUDA-capable GPU或多核cpu上编译Python代码.Pyt ...

  2. Python开发【第十三篇】高阶函数、递归函数、闭包

    函数式编程是指用一系列函数解决问题 好处:用每个函数完成每个细小的功能,一系列函数任意组合能够解决大问题 函数仅仅接收输入并产生输出,不包含任何能影响输出的内部状态 函数之间的可重入性 当一个函数的输 ...

  3. python学习三十四天函数高阶函数定义及用法

    python函数高阶函数是把函数当成一个变量,传递给函数作为参数,或者函数的返回值里面有函数,都称为高阶函数, 1,把函数作为参数传递 def dac(x,y): return x+y def tes ...

  4. Python笔记_第四篇_高阶编程_实例化方法、静态方法、类方法和属性方法概念的解析。

    1.先叙述静态方法: 我们知道Python调用类的方法的时候都要进行一个实例化的处理.在面向对象中,一把存在静态类,静态方法,动态类.动态方法等乱七八糟的这么一些叫法.其实这些东西看起来抽象,但是很好 ...

  5. Python笔记_第四篇_高阶编程_魔法(术)方法详解(重载的再详解)

    1. 魔法方法是什么? 魔法方法(Magic Method)是Python比较独特的应用,它可以给你的类增加特殊的方法,如果你的对象实现了(重载),这些方法中的某一个,就会被Python所调用.正如装 ...

  6. Python笔记_第四篇_高阶编程_再议装饰器和再议内置函数

    1. 概述: 我们在前面用了很多的装饰器这个工具的方法.这个位置要系统的讲一下装饰器. 1.2 为什么需要装饰器. 装饰器本质是一个Python函数,它可以让其他函数在不需要任何代码变动的前提下增加额 ...

  7. Python笔记_第四篇_高阶编程_正则表达式_2.正则表达式入门

    1. 匹配单个字符和数字: . --->> 匹配除换行符以外的任意字符.[0123456789] --->> []字符集合,表示匹配方括号中所包含的任意一个字符.[Thomas ...

  8. Python笔记_第四篇_高阶编程_进程、线程、协程_4.协程

    1.协程的概念: 子程序或者子函数,在所有语言中都是层级调用,比如A调用B,再B执行的过程中又可以调用C,C执行完毕返回,B执行返回,最后是A执行完毕返回.是通过栈来实现的,一个线程就是执行一个自称, ...

  9. Python笔记_第四篇_高阶编程_进程、线程、协程_3.进程vs线程

    1.多任务的实现原理: 通常我们会设计Mater-Workder模式,Master负责分配任务,Worker负责执行任务,因此多任务环境下,通常是一个Master,多个Worker 2.多进程: 主进 ...

  10. Python笔记_第四篇_高阶编程_进程、线程、协程_1.进程

    1. 多任务原理: 现代操作系统,像win,max os x,linux,unix等都支持多任务. * 什么叫做多任务? 操作系统可以同时运行多个任务. * 单核CPU实现多任务原理? 操作系统轮流让 ...

随机推荐

  1. maven的概念模型及maven坐标

     1.概念模型 项目对象模型:一个maven工程有一个pom.xml文件,通过pom.xml文件定义项目的坐标.项目依赖.项目信息.插件目标等. 依赖管理系统:通过maven的依赖管理对项目所依赖的j ...

  2. 指令——mkdir

    一个完整的指令的标准格式: Linux通用的格式——#指令主体(空格) [选项](空格) [操作对象] 一个指令可以包含多个选项,操作对象也可以是多个 指令mkdir——(make directory ...

  3. 137-PHP static修饰的类属性

    <?php class test{ //定义一个类 public static $num=0; //定义static修饰的类属性 public function __construct(){ / ...

  4. jQuery原理系列-css选择器实现

    jQuery最强大的功能在于它可以通过css选择器查找元素,它的源码中有一半是sizzle css选择器引擎的代码,在html5规范出来之后,增加了document.querySelector和doc ...

  5. 【转】在C#中?,?:和??

    符号:?名称:可空类型修饰符.引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; 是正确的,int i=null; 编译器就会报错.为了使值类型 ...

  6. Power BI角色控制

    Case:企业的数据分析报表经常需要进行权限控制,根据读者的部门或职位,决定他可以看到的数据.例如,A部门的人只能查看A部门的数据,B部门的人只能查看B部门的数据,而领导层则可以看到所有的数据. 1, ...

  7. 实验吧-隐写术-黑与白(二)(反转+五笔+Image steganography)

    反转有二:颜色反转.文件名反转 文件名这么乱,毫无规律,好奇怪,进行反转后发现是:steganography(就是隐写术的意思),这还是个图片文件,有一款工具正好叫Image steganograph ...

  8. java 实体 set数据 报空指针异常

    今天在做一个调用阿里云AXB隐私保护,需要调用通话记录的消费队列,然后set到实体中,然后插入到数据库,但是set的这一步报错 以为工具拿不到值,然后打印发现是有值的, 然后再看一下实例的类型是没错的 ...

  9. spring监听器+定时任务

    背景:在原SSM项目中,拟定在每晚的23:59:59执行一个批处理任务. 设计思路:用jdk自带的定时器触发任务执行,设置下次执行间隔为24小时.定时任务由spring的监听器去启动. jdk版本:1 ...

  10. linux下软件包的安装方式

    参考:https://blog.51cto.com/13589255/2071277