正则表达式(介绍)
目录
一.什么是正则表达式
1.独立的语言,专门用来匹配,效验,筛查所需要的数据
2.记(内置模块re)任何语言都可以使用 python必须借助内置模块re
3.正则表达式:利用了'特殊符号'组合,去字符串中筛选出想要的数据
1.例题
手机号效验
1.手机号通常(13.15.17.18.19)开头组成
2.必须是11位的纯数字
# 1.获取用户的手机号
phone_num = input('请输入您的手机号>>>:').strip()
# 2.先校验是否是11位
if len(phone_num) == 11:
# 3.再校验是否是纯数字
if phone_num.isdigit():
# 4.校验开头是否合法
if phone_num.startswith('13') or phone_num.startswith('15') or phone_num.startswith(
'17') or phone_num.startswith('18'):
print('是一个正常的手机号')
else:
print('手机号开头不合法')
else:
print('手机号必须是纯数字')
else:
print('手机号必须是11位')
2.正则表达式
import re
# 调用模块re
phone_number = input('please input your phone number : ').strip()
# 用户输入手机号.去除首尾空格
if re.match('^(13|14|15|18)[0-9]{9}$', phone_number):
# ()组合 内部字符串
# 判断 ^判断开头是否是13.14.15.18 |或的意思
# 判断 [0-9]是否为0-9之间数字或者判断是否为纯数字
# 判断 {9} 13.14.15.18已经是两位所以这是判断是否为9位数
# 判断 $ 结尾(任意9个数结尾)
print('正确手机号码')
else:
print('错误手机号码')
"""在匹配筛选查找数据的时候可以使用正则提供的符号也可以直接写目标数据"""
二.正则表达式之字符组
在线测试网站:http://tool.chinaz.com/regex/
"""单字符组默认只能匹配一个字符"""
1.简写字‘符’
1.[012345689] 匹配0到9中间任意一个数
2.[0-9] 匹配0到9中间任意一个数
3.[a-z] 匹配a到z中间任意一个数
4.[A-Z] 匹配A到Z中间任意一个数
5.[0-9A-Za-z] 匹配任意数字大小写中间任意一个数
2.特殊符号
1.'.' 匹配除了换行符以外的任意一个数
2.'\w' 匹配字母.数字.下滑线之内的任意一个数
3.'\d' 匹配任意的数字(是数字都要)
4.'\t' 匹配一个制表符(TAB键盘)
5.'^' 匹配字符串开始 '2' ^2 2必须在开头
6.'$' 匹配字符串结尾 '2' 2$ 2必须在末尾
7.'\W' 匹配非字母.数字.下滑线任意一个数
8.'\D' 匹配非数字 (是数字都不要)
9.'|' |管道符 or(或)
10.'()' 分组
11.'[]' 字符组概念,里面所有数据都是或的关系
12'[^]' 取反操作
3.词量(贪婪匹配的名词)
"""量词必须跟在表达式的后面 不能单独使用 目的是增加匹配的字符数"""
1.'*' 匹配0次或者多次(默认为:越多越好)
2.'+' 匹配1次或者多次(默认为:越多越好)
3.'?' 匹配0次或者1次 (默认为:越多越好)
4.'{n}' 匹配N次 (默认为:越多越好)
5.'{n,}' 匹配最少N次 (默认为:越多越好)
6.'{n,m}' 匹配N次到M次 (默认为:越多越好)
三.取消转义
\n 匹配不上 结果是False
\\n 用\代替转义 结果\n
\\\\ 用\\代替转义 结果\\n
"""python中可以在字符串前加'r'取消转义"""
.四.贪婪匹配与非贪婪匹配
正规|匹配文件|结果
# 1.贪婪匹配(全都要>为结尾)
<.*>|<script>alert(0)<script>|1条
# 2.非贪婪匹配(只要<>内的)
<.*?>|<script>alert(0)<script>|2条
五.er模块
1.在python中使用正规需借助于模块er
2.或者其他第三方模块
3.import re
1.使用方法01
re.findall('a', 'jason oscar aaa')
# 'a'表达式
# 'jason oscar aaa'匹配的文本
# findall所有符合条件的数据 并且组织成了列表
# 结果是['a', 'a', 'a', 'a', 'a']
2.使用方法02
re.search('a', 'jason oscar aaa')
# 'a'表达式
# 'jason oscar aaa'匹配的文本
# search 不贪婪找到一个符合条件就结束没有返回None
# 结果 a
3.使用方法03
re.match('a', 'jason oscar aaa')
# 'a'表达式
# 'jason oscar aaa'匹配的文本
# match 给a自动加上了'^'开头必须是a 不然返回None
4.使用方法04
re.finditer('a', 'jason oscar aaa')
# 'a'表达式
# 'jason oscar aaa'匹配的文本
# finditer变成了迭代器对象,节省空间
# ([obj.group() for obj in res3]) 列表生成式 for循环调用
# ['a', 'a', 'a', 'a', 'a']
5.使用方法05
re.compile('\d+') # 写好正则之后反复使用
print(re.findall(obj,'odasdkkkjj'))
print(re.findall(obj,'oda21351jj'))
呆!呆!呆!呆!