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常用小技巧总结
Jun 01 Python
Python深入06——python的内存管理详解
Dec 07 Python
MAC中PyCharm设置python3解释器
Dec 15 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
Aug 03 Python
在Python中输入一个以空格为间隔的数组方法
Nov 13 Python
Python数据集切分实例
Dec 08 Python
详细介绍Python进度条tqdm的使用
Jul 31 Python
Python爬虫 urllib2的使用方法详解
Sep 23 Python
PyCharm2019安装教程及其使用(图文教程)
Sep 29 Python
Python面向对象编程基础实例分析
Jan 17 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
Jan 17 Python
keras的backend 设置 tensorflow,theano操作
Jun 30 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
php设计模式 Interpreter(解释器模式)
2011/06/26 PHP
php打开远程文件的方法和风险及解决方法
2013/11/12 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
js调用css属性写法
2013/09/21 Javascript
jquery中交替点击事件toggle方法的使用示例
2013/12/08 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
js回调函数原理与用法案例分析
2020/03/04 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
请不要重复犯我在学习Python和Linux系统上的错误
2016/12/12 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
python list多级排序知识点总结
2019/10/23 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
django model通过字典更新数据实例
2020/04/01 Python
python redis存入字典序列化存储教程
2020/07/16 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
美国鞋类购物网站:Shiekh Shoes
2016/08/21 全球购物
Nordgreen美国官网:在线购买极简主义斯堪的纳维亚手表
2019/07/24 全球购物
临床医学专业学生的自我评价分享
2013/11/21 职场文书
单位在职证明书
2014/09/11 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
刑事法律意见书
2015/06/04 职场文书
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL
使用Python获取字典键对应值的方法
2022/04/26 Python