这或许是我见过的最简单的正则表达式教程(二)
时间:2022-05-08
本文章向大家介绍这或许是我见过的最简单的正则表达式教程(二),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
五一劳动节来啦,小小挖掘机们小编们首先祝大家劳动节快乐!
作为中国放假大学的一员,除了趁着长达8天的五一春假好好休整之外,当然还要忙中偷闲补习一下python的基本知识,今天想带代大家补习的是python中的正则表达式。不论你是否掌握python中的正则表达式,相信你看了此次教程之后会对它有一个更深入的理解和掌握。
话不多说,直接上代码:
github链接:https://github.com/princewen/professional-python3
第三节:分组
"""
作者:文文
主要介绍正则表达式中的分组概念
python版本:python3.5
"""
import re
"""
python正则表达式提供了一个机制将表达式分组,当使用分组时,除了获得整个匹配,还可以在匹配中选择每一个单独组
可以在正则表达式中使用圆括号指定分组
"""
match = re.search(r'([d]{3})-([d]{4})','867-5309 / Jenny')
#返回整个匹配,即867-5309
print (match.group())
#返回一个对应每一个单个分组的元组
#output : ('867', '5309')
print (match.groups())
#获取单个分组,0代表完整的匹配,正式的分组编号从1开始
#output : 867-5309
print (match.group(0))
#output : 867
print (match.group(1))
#output : 5309
print (match.group(2))
"""
命名分组
除了按位置编号的分组外,python正则表达式还提供一个命名分组的机制
一个命名分组的语法是在开始的"("字符后面立即添加 ?P<group_name>
当使用命名分组时,match对象提供了一个groupdict函数,返回一个分组字典,键对应分组的名称
当命名分组和非命名分组同时出现时,非命名分组不会出现在返回的字典中
"""
match = re.search(r'(?P<first_three>[d]{3})-(?P<last_four>[d]{4})','867-5309 / Jenny')
#output : 867
print (match.group('first_three'))
#output : {'last_four': '5309', 'first_three': '867'}
print (match.groupdict())
match = re.search(r'(?P<first_three>[d]{3})-([d]{4})','867-5309 / Jenny')
#非命名分组不会出现在结果中
#output : {'first_three': '867'}
print (match.groupdict())
"""
引用已经存在的分组
有时候,你或许会寻找同样一个子匹配,该匹配会接下来再次出现
例如,尝试解析一段xml代码,xml代码的开始标记和结束标记必须是相同的,使用<([w_]+)>和<(/[w_]+)>并不可行,因为没有限制开始标记必须相同,<boo>和</foo>也可以匹配
正则表达式提供了解决这种问题的一种方式--使用回溯引用
可以使用M回溯引用编号分组,此时1表示匹配第一个分组,2表示匹配第二个分组(最多99个)
"""
#匹配xml
match = re.search(r'<([w_]+)>stuff</1>','<foo>stuff</foo>')
#output : <foo>stuff</foo>
print (match.group())
#output : ('foo',) ,此时只有一个分组,因为回溯引用取代了第二个分组
print (match.groups())
#output : None , 因为前后两个标签不一致
print (re.search(r'<([w_]+)>stuff</1>','<foo>stuff</boo>'))
第四节:先行断言
"""
作者:文文
正则表达式中的先行断言知识
python版本:python3.5
"""
import re
"""
正则表达式中有一种机制能够基于之后的内容是否存在接受或者拒绝一个匹配,而不需要接下来的内容作为匹配的一部分,它被称为先行断言
取反先行断言:使用(?!字符、字符组或其他基本单元)
正向先行断言: 使用(?=字符、字符组或其他基本单元)
"""
#取反先行断言
#表示n后面不能紧跟e
#仅仅返回字符n
#output : <_sre.SRE_Match object; span=(2, 3), match='n'>
print (re.search(r'n(?!e)','final'))
#output : None
print (re.search(r'n(?!e)','jasmine'))
#output : <_sre.SRE_Match object; span=(5, 6), match='n'>
print (re.search(r'n(?!e)','Python'))
#正向先行断言,表示n后面紧跟e,但返回的匹配结果不包含后面的e
#output : <_sre.SRE_Match object; span=(5, 6), match='n'>
print (re.search(r'n(?=e)','jasmine'))
#output : None
print (re.search(r'n(?=e)','python'))
未完待续。。。
想了解更多? 那就赶紧来关注我们
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 用C++跟你聊聊“适配器模式”
- 【tensorflow2.0】评价指标metrics
- 数据库(二)--多对多相关操作
- 【tensorflow2.0】优化器optimizers
- 数据库(三)--多对多,一对多,一对一
- 【tensorflow2.0】回调函数callbacks
- 用C++跟你聊聊“观察者模型”
- 【tensorflow2.0】构建模型的三种方法
- django实战(一)--dango自带的分页(极简)
- 线程池 -- 动态链接库
- 【tensorflow2.0】训练模型的三种方法
- 用C++跟你聊聊“建造者模式”
- 【tensorflow2.0】使用TPU训练模型
- 用C++跟你聊聊“外观模式”
- 【tensorflow2.0】使用tensorflow-serving部署模型