这或许是我见过的最简单的正则表达式教程(一)
时间:2022-05-08
本文章向大家介绍这或许是我见过的最简单的正则表达式教程(一),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
五一劳动节来啦,小小挖掘机们小编们首先祝大家劳动节快乐!
作为中国放假大学的一员,除了趁着长达8天的五一春假好好休整之外,当然还要忙中偷闲补习一下python的基本知识,今天想带代大家补习的是python中的正则表达式。不论你是否掌握python中的正则表达式,相信你看了此次教程之后会对它有一个更深入的理解和掌握。
话不多说,直接上代码:
github链接:https://github.com/princewen/professional-python3
第一节:基本知识
"""
作者:文文
python中的正则表达式
python版本:python3.5
"""
#python中正则表达式是re模块
import re
#re模块最主要的是search函数,接受一个正则表达式规则和一个字符串,返回第一个匹配,如果没有找到匹配,返回None
# r代表原始字符串,原始字符串与正常字符串的区别是原始字符串不会将解释成一个转义字符,但是遇到+、(、)等的时候仍表示转义字符
# search对象返回结果可以又match对象接受,
match = re.search(r'fox','The quick brown fox jumped...')
#调用group得到搜索结果,输出fox
print (match.group())
#在原始字符串中匹配开始的索引
print (match.start())
#在原始字符串中匹配结束的索引
print (match.end())
#search 得到的是第一个匹配,如果想要的到所有的匹配,那么可以使用findall或者finditer函数
#findall 返回搜索结果的列表
#finditer 返回一个生成器
#output : ['o', 'o']
print (re.findall(r'o','The quick brown fox jumped'))
# output:<callable_iterator object at 0x102d386a0>
print (re.finditer(r'o','The quick brown fox jumped'))
第二节:基本匹配规则
"""
作者:文文
主要介绍一些基本的匹配规则
python版本:python3.5
"""
import re
"""1 字符组
使用方括号并在方括号内列出所有可能的字符从而表示一个字符组,一定要注意,它仅仅匹配一个字符
[Pp]:匹配大写P或者小写p
[A-Z]:匹配大写A到大写Z中任何一个
[^0-9]:在方括号中的^是取反字符(^还可以表示字符串的开始),表示匹配除0-9之外的字符
一些快捷方式
w: 与任意单词字符匹配,python3中基本上与几乎任何语言的任意单词匹配,python2中至于英语单词字符匹配,但无论哪个版本,都会匹配数字、下划线或者连字符
W: 匹配w包含字符之外的所有字符
d: 匹配数字字符,python3中,还与其他语言的数字字符匹配,在python2中,它只匹配[0-9]
D: 匹配d包含字符之外的所有字符
s: 匹配空白字符,比如空格、tab、换行等
S: 匹配s包含字符之外的所有字符
b: 匹配一个长度为0的字串,它仅仅在一个单词开始或结尾处匹配,也被称为词边界字符快捷方式
B: 匹配不在单词开始或结束位置长度为0的子字符串,简单来说,使用B表明这里不是一个单词的结束
字符串的开始与结束
^字符指定字符串的开始
$字符指定字符串的结束
任意字符
.字符表示任何单个字符,但是它仅仅只能出现在方括号字符组以外,如果出现在方括号里面,仅表示.字符这一个字符
"""
#output:<_sre.SRE_Match object; span=(0, 6), match='Python'>
print (re.search(r'[pP]ython','Python 3'))
#output:<_sre.SRE_Match object; span=(0, 6), match='python'>
print (re.search(r'[pP]ython','python 3'))
#output:<_sre.SRE_Match object; span=(0, 4), match='gray'>
print( re.search(r'gr[ae]y','gray'))
#output :None, 因为方括号仅仅匹配一个字符
print (re.search(r'gr[ae]y','graey'))
#output:<_sre.SRE_Match object; span=(0, 1), match='x'>
print (re.search(r'[a-zA-Z]','x'))
#output:<_sre.SRE_Match object; span=(0, 1), match='A'>
print (re.search(r'[^a-z]','A'))
#output:None
print (re.search(r'[^a-z]','b'))
#output : <_sre.SRE_Match object; span=(0, 4), match='cron'>
print (re.search(r'bcronb','cron'))
#output : None
print (re.search(r'bcronb','croner'))
#output : None
print (re.search(r'cronB','cron'))
#output : <_sre.SRE_Match object; span=(0, 4), match='cron'>
print (re.search(r'cronB','croner'))
#output : <_sre.SRE_Match object; span=(0, 1), match='P'>
print (re.search(r'w','Python 3'))
#output : ['P', 'y', 't', 'h', 'o', 'n', '3']
print (re.findall(r'w','Python 3'))
#output : None
print (re.search(r'^python','This code is in python'))
#output : <_sre.SRE_Match object; span=(0, 6), match='python'>
print (re.search(r'^python','python 3'))
#output : <_sre.SRE_Match object; span=(16, 22), match='python'>
print (re.search(r'python$','This code is in python'))
#output : None
print (re.search(r'python$','python 3'))
#output : <_sre.SRE_Match object; span=(0, 6), match='python'>
print (re.search(r'p.th.n','python 3'))
"""2 可选字符
目前为止,所有我们看到的正则表达式都是在正则表达式中的字符与被搜索的字符串中的字符保持1:1的关系,
然而有时,一个字符或许是可选的,比如有多种拼写方式的单词,如color 和 colour 都表示颜色
此时可以使用?指定一个字符、字符组或其他基本单元可选,即期望该字符、字符组或其他基本单元出现0次或者1次(这是?的第一个作用,出现在一个字符、字符组或其他基本单元后面时起作用)
"""
#output : <_sre.SRE_Match object; span=(15, 20), match='honor'>
print (re.search(r'honou?r','He served with honor and distinction.'))
#output : <_sre.SRE_Match object; span=(15, 21), match='honour'>
print (re.search(r'honou?r','He served with honour and distinction.'))
"""3 重复
有时你需要同样的字符或者字符组重复出现,或者出现0次或者1次
{N} : 表示一个字符、字符组或其他基本单元重复出现N次
{M,N} : 表示一个字符、字符组或其他基本单元重复出现M-N次,最少出现M次,最多出现N次,但尽可能匹配多的字符
{M,N}? : 表示一个字符、字符组或其他基本单元重复出现M-N次,但尽可能少的匹配字符(这是?的第二个作用,出现在重复之后,使其变为惰性匹配)
{M,}: 表示一个字符、字符组或其他基本单元重复出现至少M次,但没有上限
* : 代替{0,},表示一个字符、字符组或其他基本单元重复出现0次或多次
+ : 代替{1,},表示一个字符、字符组或其他基本单元重复出现1次或多次
"""
#output : <_sre.SRE_Match object; span=(0, 8), match='867-5309'>
print (re.search(r'[d]{3}-[d]{4}','867-5309 / Jenny'))
#output : <_sre.SRE_Match object; span=(0, 4), match='0323'>
print (re.search(r'[d]{3,4}','0323'))
#惰性匹配, output : <_sre.SRE_Match object; span=(0, 3), match='032'>
print (re.search(r'[d]{3,4}?','0323'))
#<_sre.SRE_Match object; span=(0, 4), match='1600'>
print (re.search(r'[d]+','1600 Pennsylvania Ave.'))
未完待续。。。
想了解更多? 那就赶紧来关注我们
- HDU 2520 我是菜鸟,我怕谁
- HUST 1586 数字排列
- next_permutation(全排列算法)
- Hadoop数据分析平台实战——100HBase和MapReduce整合离线数据分析平台实战——100HBase和MapReduce整合
- Hadoop数据分析平台实战——120Hive Shell命令介绍 01(熟悉Hive略过)离线数据分析平台实战——120Hive Shell命令介绍 01(熟悉Hive略过)
- HUST 1588 辗转数对
- HUST 1584 摆放餐桌
- HUST 1585 排队
- 【QQ/微信个人号变身机器人】炸群+远程监控个人PC的尝试
- HUST 1583 长度单位
- FZU 2167 大王叫我来巡山呐
- HDU 1021 Fibonacci Again
- Hadoop数据分析平台实战——180Oozie工作流使用介绍离线数据分析平台实战——180Oozie工作流使用介绍
- 博弈论及算法实现
- 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 数组属性和方法
- Python实现验证码识别
- 详解PHP神奇又有用的Trait
- laravel实现按时间日期进行分组统计方法示例
- Pytorch 使用CNN图像分类的实现
- PHP实现无限极分类的两种方式示例【递归和引用方式】
- 记录模型训练时loss值的变化情况
- phpstorm 配置xdebug的示例代码
- 利用Python实现Excel的文件间的数据匹配功能
- PHP设计模式之简单工厂和工厂模式实例分析
- PHP实现数据四舍五入的方法小结【4种方法】
- 如何在Windows中安装多个python解释器
- PHP设计模式之抽象工厂模式实例分析
- 使用python matploblib库绘制准确率,损失率折线图
- Django REST Swagger实现指定api参数
- matplotlib.pyplot.matshow 矩阵可视化实例