今日总结
- 正则表达式
- 正则表达式基本使用
- 正则表达式特殊符号
- 正则表达式量词
- 正则表达式贪婪与非贪婪
- 正则表达式取消转义
- python中内置模块之re模块
正则表达式
# 正则表达式是一门独立的语言,专门用来匹配、校验、筛查所需的数据,如果在python中使用的话就必须要借助于内置模块re,正则表达式就是对字符串操作的一种逻辑公式,用事先定义好的一些特定字符,及这些特定字符的组合,组成一个‘规则字符串’,这个‘规则字符串’用来表达对字符串的一种过滤逻辑。
eg:用手机号注册一个账号
phone_num = input('请输入您的手机号>>>:').strip()
if len(phone_num) == 11:
if phone_num.isdigit():
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位')
# 以上就是用一般代码写的,很长很麻烦,但是使用正则表达式来写的话就会简单很多:
import re
phone_number = input('please input your phone number : ').strip()
if re.match('^(13|15|17|18)[0-9]{9}$',phone_number):
print('正在注册')
else:
print('手机号码错误')
# 在匹配筛选查找数据的时候可以使用正则提供的符号,也可以直接写目标数据
正则表达式之字符串
# 单个字符组默认一次只匹配一个字符
[0123456789] 匹配0到9之间的一个数字
[0-9] 匹配0-9之间的任意一个数字
[a-z] 匹配a到z之间的任意一个小写字母
[A-Z] 匹配A到Z之间的任意一个大写字母
[0-9a-zA-Z] 匹配任意一个数字或者大小写字母(没有顺序)
正则表达式之特殊符号
# 特殊符号默认也是一次匹配一个字符
. 匹配除换行符以外的任意字符
\w 匹配数字、字母、下划线
\d 匹配任意数字
\t 匹配一个制表符(tab)
^ 匹配字符串的开始(eg:^9,找9并且9必须在开头)
$ 匹配字符串的结尾(eg:9$,找9并且9必须在末尾)
\W(大写) 匹配非字母或数字或下划线
\D(大写) 匹配非数字
a|b 匹配a或者b
() 给正则表达式分组,不影响正则匹配
[] 字符组的概念(里面的数据都是或的关系)
[^] 上键号出现在了中括号的里面意思是取反操作
正则表达式之量词
# 量词必须跟在表达式的后面,不能单独使用,目的是增加匹配的字符数
* 重复零次或者多次(默认就是多次:越多越好)
+ 重复一次或者多次(默认就是多次:越多越好)
? 重复零次或者一次(默认就是一次:越多越好)
{n} 重复n次
{n,} 重复最少n次最多多次(越多越好)
{n,m} 重复n到m次(越多越好)
复杂re模块
# 1.内置的re模块
# 2.第三方的其它模块
import re
1.res = re.findall('a','jason oscar aaa')
# findall(正则表达式,待匹配文件)
print(res)
# 结果是所有符号条件的数据,并且组织成列表
2.re.search()
# 查找到一个符号条件的数据就结束,没有则返回None
print(res.group())
# 没有的话就无法调用group(),直接报错
3.re.match()
# 从字符串的开头匹配,如果没有就返回None,类似于给正则自动加了^ 如果符合也只获取一个就结束
4.re.finditer()
# 结果是一个迭代器对象,为了节省空间
print([obj.group() for obj in res])
5.obj = re.compile('\d+')
#提前写好后续需要经常使用的正则,可以反复调用