首页 > 其他分享 >正则表达式知识点总结

正则表达式知识点总结

时间:2023-09-21 19:05:44浏览次数:35  
标签:总结 知识点 search 匹配 正则表达式 re print 小平 findall

第一部分:正则表达式 概念

一个函数: re.findall(pattern, string)

一些元字符: .  *  ?  +  []  ()  \  ^  $

通过 () 来改变 findall 的行为

 例1: 判断一个手机号码(长度、开头数字为1、只能是数字)

import re
a=12345678901
def check_phone(phone):
    str_ph=str(phone)
    # 普通写法
    # if str_ph.isdigit() and len(str_ph)==11 and str_ph.startswith('1'):
    # 使用正则表达式写法,代码简约了很多
    if re.search(r'^1\d{10}$',str_ph):  # 第二个参数是个字符串,是对传进去的字符串处理,高效的处理文本
        print(str_ph)
    else:
        print('请输入正确的手机号:')

check_phone(a) # 调用

运行截图:

 如果输入a=22345678901

运行截图:

例2:search、match、finall 练习

print(re.search(r'^1\d{10}','222233442')) # r是取消/换行  None
# 从左到右匹配满足条件的
print(re.search(r'5','45455498765'))
# <_sre.SRE_Match object; span=(1, 2), match='5'>
# 从左到右匹配的,匹配第一个55(通过下标从3-5)
print(re.search(r'55','45455498765'))
# <_sre.SRE_Match object; span=(3, 5), match='55'>
# 匹配所有的5
print(re.findall(r'5','45455498765'))
# ['5', '5', '5', '5']
# 匹配开头
print(re.match(r'45','45455498765'))
# <_sre.SRE_Match object; span=(0, 2), match='45'>
print("================================================")
r=re.match(r'45','454554598765')
print(r)  # 所匹配的对象
print(r.start()) # 匹配的开始位置
print(r.end()) # 匹配的结束位置
print(r.span()) # 开始和结束位置
print(r.group()) # 所匹配到的字符
print("================================================")
# 43455498765
s='45455498765'
print(s[0:2])  # 用切片切45
print(re.match(r'45','43455498765')) # None

运行截图:

 第二部分:元字符

思考:

什么是元字符?
本身具有特殊含义的字符
常用的元字符:. ^ $ {} * + ? | []

import re
print(re.search(r'.','小平32sswomnm2344553')) # 匹配任意一个字符
# <_sre.SRE_Match object; span=(0, 1), match='小'>
print(re.search(r'\d','小平32sswomnm2344553')) # 匹配数字
# <_sre.SRE_Match object; span=(2, 3), match='3'>
print(re.search(r'\D','小平32sswomnm2344553')) # 匹配非数字
# <_sre.SRE_Match object; span=(0, 1), match='小'>
print(re.search(r'\s','小平\t32sswomnm\n234 4553')) # 匹配空白符
# <_sre.SRE_Match object; span=(2, 3), match='\t'>
print(re.search(r'\s','小 平\t32sswomnm\n234 4553')) # 匹配空白符
# <_sre.SRE_Match object; span=(1, 2), match=' '>
print(re.search(r'\S','小平32sswomnm2344553')) # 匹配非空白符
# <_sre.SRE_Match object; span=(0, 1), match='小'>
print(re.search(r'\w','@_小平32sswomnm2344553')) # 匹配所有除特殊字符以外(@ 为特殊字符)
# <_sre.SRE_Match object; span=(1, 2), match='_'>
print(re.search(r'\W','@_小平32sswomnm2344553')) # 匹配特殊字符
# <_sre.SRE_Match object; span=(0, 1), match='@'>
print(re.search(r'\W','%_小平32sswomnm2344553')) # 匹配特殊字符
print(re.search(r'[0-9]','@_小平32sswomnm2344553')) # 匹配一段范围
# <_sre.SRE_Match object; span=(4, 5), match='3'>
print(re.findall(r'[0-9]','@_小平32sswomnm2344553')) # 匹配一段范围
# ['3', '2', '2', '3', '4', '4', '5', '5', '3']
print(re.search(r'[a-z]','@_小平32sswomnm2344553')) # 匹配一段范围
# <_sre.SRE_Match object; span=(6, 7), match='s'>
print(re.findall(r'[a-z]','@_小平32JLsswomnm2344553')) # 匹配一段范围(小写)
# ['s', 's', 'w', 'o', 'm', 'n', 'm']
print(re.findall(r'[A-z]','@_小平32JLsswomnm2344553')) # 匹配一段范围(大小写)
# ['_', 'J', 'L', 's', 's', 'w', 'o', 'm', 'n', 'm']
print(re.findall(r'[a-z0-9]','@_小平32JLsswomnm2344553'))
# ['3', '2', 's', 's', 'w', 'o', 'mddddddddd', 'n', 'm', '2', '3', '4', '4', '5', '5', '3']
print(re.findall(r'[0-5a-z]','@_小平32JLsswomnm2344553'))
print('=============================================================================')
print(re.findall(r'[*]','@_小平32JL*ss*womnm234*4553')) # 匹配所有*
# ['*', '*']
print(re.findall(r'\.','@_小平32.JL*ss*womnm234*455.3')) # 匹配所有点
# ['.', '.']
print(re.findall(r'4|5','@_小平32JLsswomnm2344553')) # 或
# ['4', '4', '5', '5']
print(re.findall(r'^2','@_小平32JLsswomnm2344553')) # 匹配开头
# []
print(re.findall(r'^2','2@_小平32JLsswomnm2344553')) # 匹配开头
# ['2']
# print(re.findall(r'$2','2@_小平32JLsswomnm2344553')) # 结尾(从左到右查看2应该在$之前)
print(re.findall(r'2$','2@_小平32JLsswomnm23445532'))
# ['2']
print(re.findall(r'\b32','2@_小平,32,JLsswomnm,23445532')) # 单词边界
# ['32']
print('---------------------------------------------------------------------')
print(re.search(r'\b32','2@_小平,32,JLsswomnm,23445532'))
# <_sre.SRE_Match object; span=(6, 8), match='32'>
print(re.search(r'32\b','2@x_小平,32,JLsswomnm,23445532')) # 边界
# <_sre.SRE_Match object; span=(6, 8), match='32'>
print(re.search(r'(234)','2@x_小平,32,JLsswomnm,23445234532'))
# <_sre.SRE_Match object; span=(20, 23), match='234'>
print(re.search(r'234','2@x_小平,32,JLsswomnm,23445234532')) # 可以不写括号
print(re.findall(r'234','2@x_小平,32,JLsswomnm,23445234532')) # ['234', '234']
print(re.findall(r'f(234)','2@x_小平,32,JLsswomnm,23445f234532'))
# ['234']   匹配f后面的'234' 称为分组匹配(精确匹配)
print('=================================================================================')
print(re.findall(r'2','2@x_小平,32,JLsswomnm,23445f2234532'))
print(re.findall(r'22','2@x_小平,32,JLsswomnm,23445f2234532'))
print(re.findall(r'2{2}','2@x_小平,32,JLsswomnm,23445f2234532')) # {2} 表示个数
# ['22']
print(re.findall(r'2{1,}','2@x_小平,32,JLsswomnm,23445f222223453222')) # 最小个数,无穷大(最大不写的情况下)
# ['2', '2', '2', '22222', '222']
print(re.findall(r'2{1,2}','2@x_小平,32,JLsswomnm,23445f222223453222')) # 最小个数为一个2,最大个数为两个2
# ['2', '2', '2', '22', '22', '2', '22', '2']
print(re.findall(r'2{0,2}','2@x_小平,32,JLsswomnm,23445f222223453222')) # 最小个数为空,最大个数为两个2
# ['2', '', '', '', '', '', '', '', '2', '', '', '', '', '', '', '', '', '', '', '', '2', '', '',
#  '', '', '', '22', '22', '2', '', '', '', '', '22', '2', '']
print(re.findall(r'2*','2@x_小平,32,JLsswomnm,23445f222223453222')) # 最小0 ,最大无穷大
print(re.findall(r'2+','2@x_小平,32,JLsswomnm,23445f222223453222')) # 最小个数为一个 ,最大无穷大
# ['2', '2', '2', '22222', '222']
print(re.findall(r'2?','2@x_小平,32,JLsswomnm,23445f222223453222')) # 最小0 ,最大1个
# ['2', '', '', '', '', '', '', '', '2', '', '', '', '', '', '', '', '', '', '', '', '2', '',
# '', '', '', '', '2', '2', '2', '2', '2', '', '', '', '', '2', '2', '2', '']
print(re.findall(r'2{0,1}','2@x_小平,32,JLsswomnm,23445f222223453222')) # 最小0 ,最大1个
# ['2', '', '', '', '', '', '', '', '2', '', '', '', '', '', '', '', '', '', '', '', '2',
# '', '', '', '', '', '2', '2', '2', '2', '2', '', '', '', '', '2', '2', '2', '']

运行截图(部分):

贪婪模式:(匹配满足表达式的最大内容

import re
print(re.findall(r'<.*>','<div><p><p><div>'))  # .代表任意字符,* 所有  匹配到所有
# ['<div><p><p><div>']
print(re.findall(r'<.*>','<div><p><p><div><span>'))# 查找的过去又回来
# ['<div><p><p><div><span>']
# 非贪婪模式:匹配满足表达式的最小内容
print(re.findall(r'<.*?>','<div><p><p><div><span>'))
# ['<div>', '<p>', '<p>', '<div>', '<span>']

运行截图:

 

========每天最大的兴趣就是赚钱、写代码、学知识

标签:总结,知识点,search,匹配,正则表达式,re,print,小平,findall
From: https://www.cnblogs.com/xiaogan-520/p/17720674.html

相关文章

  • 每日总结(sqoop基本用法)
    将mysql中user_info表数据导入到HDFS的/test路径1bin/sqoopimport\2--connectjdbc:mysql://hadoop102:3306/gmall\库名3--usernameroot\4--password123456\5--tableuser_info\表名6--columnsid,login_name\......
  • 9.21每日总结
     Hive表操作–增删改:(1)创建一个自定义分隔符的普通内部表:CREATETABLEIFNOTEXISTSemployee( #employee为举例表名,根据实际情况进行替换,下同namestring,work_placeARRAY<string>,sex_ageSTRUCT<sex:string,age:int>,skills_scoreMAP<string,int>,d......
  • 每日总结|9.21-Hive搭建及报错解决方案
    搭建安装hive把apache-hive-3.1.2-bin.tar.gz上传到linux的/opt/software目录下 解压apache-hive-3.1.2-bin.tar.gz到/opt/module/目录下面tar-zxvf/opt/software/apache-hive-3.1.2-bin.tar.gz-C/opt/module/修改apache-hive-3.1.2-bin.tar.gz的名称为h......
  • Git忽略提交规则 - .gitignore配置运维总结
    在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交。简单来说一个场景:在你使用gitadd.的时候,遇到了把你不想提交的文件也添加到了缓存中去的情况,比如项目的本地配置信息,如果你上传到Git中去......
  • 工作流程优化 - 总结笔记
    一、一个忙碌的上午(现实中的工作流问题)小张已经忙了一个早上了,她觉得自己还是很有条理的,这种有条理的忙碌感让他觉得内心充实。她会把每件工作按照紧急程序进行一个大致的排序,一件件处理,但是判断依据呢?只是自己的一个感觉而已。(问题:没有对瓶颈环节设计紧急的分流方案)老王的......
  • 软件产品研发流程总结
    开发流程更完整、更有效率,产品才能脱颖而出。 1.项目启动在项目启动阶段,主要确定项目的目标、范围及其可行性,我们需要对项目的背景、干系人、决策人等等进行了解。编制项目章程和组建项目团队,包括:产品经理、架构师、UI工程师、开发工程师、测试工程师等;明确项目管理制度,每......
  • 2023.9.21——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午上课,下午上课。我了解到的知识点:1.了解了关于模型训练的一些知识和注意事项;2.了解了关于软件构造的一些知识,明日计划:1.完成Hive的测试;......
  • 问题总结
    1.参数影响RDS实例性能分库分表实例,共5台rds相同的配置,每个rds20个表,在执行相同的脚本(串行执行altertable来回收表空间),发现其中一台数据库(rds1)实例执行的速度比其他4台足足慢了1天,分库分表,数据量是差不多的,表大小也差不多,为什么会有这么大的差异呢?排查结果:发现rds1的其中......
  • 9月16日总结
    数据库sql中判断时间冲突数据库现有数据其中两列:s-开始时间,e-结束时间.在新插入数据s',e'之前需要判断两个时间之间是否有重合因为使用mybatis-plus的缘故,结论都使用s或e在符号前面.s<e比如yyyy-MM-ddHH:mm:ss格式的数据,多用于判断预约时间和每日排班冲突......
  • 9月19日总结
    合集-计算机网络(5)1.网络协议的重要性与应用:理解进程间通信和网络分层结构(上)09-172.网络协议的重要性与应用:理解进程间通信和网络分层结构(下)09-183.深入理解HTTP的基础知识:请求-响应过程解析09-194.深入解析HTTP请求:了解请求特征与报文格式的关键秘密09-205.TCPvsUD......