第一部分:正则表达式 概念
一个函数: 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