Python正则re模块使用步骤及原理解析


Posted in Python onAugust 18, 2020

python中使用正则表达式的步骤:

1.导入re模块:import re

2.初始化一个Regex对象:re.compile()

3.刚刚创建的Regex对象调用search方法进行匹配,返回要给March对象

4.刚刚的March对象调用group方法,展示匹配到的字符串

下面例子的知识点:

对正则表达式分组用:(),正则里的分组计数从1开始,不是从0,切记~~

  • group(数字):去对应的分组的值

  • groups():返回所有分组的元组形式

\d表示一个数字

regex_obj = re.compile(r'(\d\d\d)-(\d\d\d)-(\d\d\d\d)')
match_obj = regex_obj.search('我司电话:035-411-1234')
result1 = match_obj.group(1)
result2 = match_obj.group(2)
result3 = match_obj.group(3)
print(result1)
print(result2)
print(result3)
result4 = match_obj.group()
print(result4)
result5 = match_obj.groups()
print(result5)

执行结果:

035
411
1234
035-411-1234
('035', '411', '1234')

补充知识点:\w表示一个单词,\s表示一个空格

regex_obj = re.compile(r'(\d\w\d)-(\d\d\d)-(\d\d\d\d)')
match_obj = regex_obj.search('我司电话:0a5-411-1234')
result = match_obj.group(1)
print(result)
regex_obj = re.compile(r'(\d\w\d)-(\d\d\d)-(\d\d\d\d)')
match_obj = regex_obj.search('我司电话:0哈5-411-1234')
result = match_obj.group(1)
print(result)
regex_obj = re.compile(r'(\d\s\d)-(\d\d\d)-(\d\d\d\d)')
match_obj = regex_obj.search('我司电话:0 5-411-1234')
result = match_obj.group(1)
print(result)

执行结果:

0a5
0哈5
0 5

| 或:

regex_obj = re.compile(r'200|ok|successfully')
match_obj1 = regex_obj.search('vom get request and stored successfully')
result1 = match_obj1.group()
print(result1)
match_obj2 = regex_obj.search('vom get request,response 200 ok')
result2 = match_obj2.group()
print(result2)
match_obj3 = regex_obj.search('vom get request,response ok 200')
result3 = match_obj3.group()
print(result3)

执行结果:

successfully
200
ok

注意:如果search返回的March对象只有一个结果值的话,不能用groups,只能用group

regex_obj = re.compile(r'200|ok|successfully')
match_obj1 = regex_obj.search('vom get request and stored successfully')
result2 = match_obj1.groups()
print(result2)
result1 = match_obj1.group()
print(result1)

执行结果:

()
successfully

? :可选匹配项

+ :1次 或 n次 匹配

* :*前面的字符或者字符串匹配 0次、n次

注意:*前面必须要有内容

 regex_obj = re.compile(r'(haha)*,welcome to vom_admin system') 指haha这个字符串匹配0次或者多次

 regex_obj = re.compile(r'(ha*),welcome to vom_admin system') 指ha这个字符串匹配0次或者多次

. : 通配符,匹配任意一个字符

所以常常用的组合是:.*

regex_obj = re.compile(r'(.*),welcome to vom_admin system')
match_obj1 = regex_obj.search('Peter,welcome to vom_admin system')
name = match_obj1.group(1)
print(name)

执行结果:

Peter

{} : 匹配特定的次数

里面只写一个数字:匹配等于数字的次数

里面写{3,5}这样两个数字的,匹配3次 或 4次 或 5次,按贪心匹配法,能满足5次的就输出5次的,没有5次就4次,4次也没有才是3次

regex_obj = re.compile(r'((ha){3}),this is very funny')
match_obj1 = regex_obj.search('hahahaha,this is very funny')
print("{3}结果",match_obj1.group(1))
regex_obj = re.compile(r'((ha){3,5}),this is very funny')
match_obj1 = regex_obj.search('hahahaha,this is very funny')
print("{3,5}结果",match_obj1.group(1))

执行结果:

{3}结果 hahaha
{3,5}结果 hahahaha

findall():返回所有匹配到的字串的列表

regex_obj = re.compile(r'\d\d\d')
match_obj = regex_obj.findall('我是101班的,小李是103班的')
print(match_obj)
regex_obj = re.compile(r'(\d\d\d)-(\d\d\d)-(\d\d\d\d)')
match_obj = regex_obj.findall('我家电话是123-123-1234,我公司电话是890-890-7890')
print(match_obj)

打印结果:

['101', '103']
[('123', '123', '1234'), ('890', '890', '7890')]

[]:创建自己的字符集:

[abc]:包括[]内的字符

[^abc]:不包括[]内的所有字符

也可以使用:[a-zA-Z0-9]这样简写

regex_obj = re.compile(r'[!@#$%^&*()]')
name = input("请输入昵称,不含特殊字符:")
match_obj = regex_obj.search(name)
if match_obj:
  print("昵称输入不合法,包含了特殊字符:", match_obj.group())
else:
  print("昵称有效")

执行结果:

请输入昵称,不含特殊字符:*h
昵称输入不合法,包含了特殊字符: *

 ^:开头

 $:结尾 

regex_obj = re.compile(r'(^[A-Z])(.*)')
name = input("请输入昵称,开头必须大写字母:")
match_obj = regex_obj.search(name)
print(match_obj.group())

执行结果:

请输入昵称,开头必须大写字母:A1234
A1234

sub():第一个参数为要替换成的,第二个参数传被替换的,返回替换成功后的字符串

regex_obj = re.compile(r'[!@#$%^&*()]')
match_obj = regex_obj.sub('嘿','haha,$%^,hahah')
print(match_obj)

执行结果:

haha,嘿嘿嘿,hahah

补充一下正则表达式的表,正则太复杂了,要常看常用才能熟练

Python正则re模块使用步骤及原理解析

Python正则re模块使用步骤及原理解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现将目录中TXT合并成一个大TXT文件的方法
Jul 15 Python
Python用threading实现多线程详解
Feb 03 Python
tensorflow 使用flags定义命令行参数的方法
Apr 23 Python
用pyqt5 给按钮设置图标和css样式的方法
Jun 24 Python
python超时重新请求解决方案
Oct 21 Python
python 如何去除字符串头尾的多余符号
Nov 19 Python
解决python 读取 log日志的编码问题
Dec 24 Python
python Paramiko使用示例
Sep 21 Python
Python实现对word文档添加密码去除密码的示例代码
Dec 29 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
Mar 03 Python
python基于tkinter实现gif录屏功能
May 19 Python
python中的getter与setter你了解吗
Mar 24 Python
python使用建议技巧分享(三)
Aug 18 #Python
python3跳出一个循环的实例操作
Aug 18 #Python
OpenCV图片漫画效果的实现示例
Aug 18 #Python
Django DRF APIView源码运行流程详解
Aug 17 #Python
Django CBV模型源码运行流程详解
Aug 17 #Python
无惧面试,带你搞懂python 装饰器
Aug 17 #Python
Python Request类源码实现方法及原理解析
Aug 17 #Python
You might like
一个目录遍历函数
2006/10/09 PHP
php懒人函数 自动添加数据
2011/06/28 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
详解JavaScript逻辑Not运算符
2015/12/04 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
Vue系列:通过vue-router如何传递参数示例
2017/01/16 Javascript
Vue2 使用 Echarts 创建图表实例代码
2017/05/18 Javascript
JavaScript创建对象的七种方式(推荐)
2017/06/26 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
CentOS安装pillow报错的解决方法
2016/01/27 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
windows下python虚拟环境virtualenv安装和使用详解
2019/07/16 Python
使用pyinstaller逆向.pyc文件
2019/12/20 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
详解matplotlib绘图样式(style)初探
2021/02/03 Python
英国汽车零件购物网站:GSF Car Parts
2019/05/23 全球购物
南京市纪委监察局整改方案
2014/09/16 职场文书
求职信格式范文
2015/03/19 职场文书
对学校的意见和建议
2015/06/04 职场文书
深入理解python多线程编程
2021/04/18 Python
Matlab如何实现矩阵复制扩充
2021/06/02 Python