今日总结

  • 正则表达式
  • 正则表达式基本使用
  • 正则表达式特殊符号
  • 正则表达式量词
  • 正则表达式贪婪与非贪婪
  • 正则表达式取消转义
  • 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+')
#提前写好后续需要经常使用的正则,可以反复调用