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 相关文章推荐
Python3读取zip文件信息的方法
May 22 Python
使用Python的Tornado框架实现一个Web端图书展示页面
Jul 11 Python
利用Python操作消息队列RabbitMQ的方法教程
Jul 19 Python
Python中enumerate函数代码解析
Oct 31 Python
python实现图书借阅系统
Feb 20 Python
python如何读取bin文件并下发串口
Jul 05 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
Feb 12 Python
Python中zip函数如何使用
Jun 04 Python
基于python图书馆管理系统设计实例详解
Aug 05 Python
python安装及变量名介绍详解
Dec 12 Python
Python数据模型与Python对象模型的相关总结
Jan 26 Python
python树莓派通过队列实现进程交互的程序分析
Jul 04 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
实用函数7
2007/11/08 PHP
PHP 一个页面执行时间类代码
2010/03/05 PHP
让PHP支持断点续传的源码
2010/05/16 PHP
php导入模块文件分享
2015/03/17 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
JavaScript 解析读取XML文档 实例代码
2009/07/07 Javascript
引用其它js时如何同时处理多个window.onload事件
2014/09/02 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
2016/12/30 Javascript
ES6新特性三: Generator(生成器)函数详解
2017/04/21 Javascript
详细讲解vue2+vuex+axios
2017/05/27 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
[01:06]DOTA2小知识课堂 Ep.02 吹风竟可解梦境缠绕
2019/12/05 DOTA
Python下Fabric的简单部署方法
2015/07/14 Python
unittest+coverage单元测试代码覆盖操作实例详解
2018/04/04 Python
django使用django-apscheduler 实现定时任务的例子
2019/07/20 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
印刷工程专业应届生求职信
2013/09/29 职场文书
个人工作表现评语
2014/04/30 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电