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验证企业工商注册码
Oct 25 Python
python+pandas分析nginx日志的实例
Apr 28 Python
查看django版本的方法分享
May 14 Python
Python一句代码实现找出所有水仙花数的方法
Nov 13 Python
python实现微信防撤回神器
Apr 29 Python
python issubclass 和 isinstance函数
Jul 25 Python
python对csv文件追加写入列的方法
Aug 01 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
Apr 22 Python
在keras下实现多个模型的融合方式
May 23 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
Jun 28 Python
python爬虫使用requests发送post请求示例详解
Aug 05 Python
Python制作一个仿QQ办公版的图形登录界面
Sep 22 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设计模式小结
2013/02/15 PHP
php验证session无效的解决方法
2014/11/04 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
2018/12/05 PHP
php实现文章评论系统
2019/02/18 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
2019/04/02 PHP
php函数式编程简单示例
2019/08/08 PHP
雄兵连第三季海报曝光,艾妮熙德成主角,蔷薇新造型
2021/03/09 国漫
制作特殊字的脚本
2006/06/26 Javascript
jQuery 操作XML入门
2008/12/25 Javascript
js下用eval生成JSON对象
2010/09/17 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
JQuery validate插件验证用户注册信息
2016/05/11 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
Jquery获取radio选中值实例总结
2019/01/17 jQuery
vue spa应用中的路由缓存问题与解决方案
2019/05/31 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
2019/11/20 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
vue3.0 加载json的方法(非ajax)
2020/10/26 Javascript
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
Python判断两个list是否是父子集关系的实例
2018/05/04 Python
python安装twisted的问题解析
2018/08/21 Python
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
前端canvas动画如何转成mp4视频的方法
2019/06/17 HTML / CSS
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
Python面试题集
2012/03/08 面试题
乡镇干部十八大感言
2014/02/17 职场文书
机关干部作风建设剖析材料
2014/10/23 职场文书
展览会邀请函
2015/02/02 职场文书
基于Go Int转string几种方式性能测试
2021/04/28 Golang
详解python的内存分配机制
2021/05/10 Python
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android