Welcome!!!

F

伞兵一号,申请出战

正则表达式

正则表达式

正则表达式的作用

# 在日常开发中,我们在很多地方会用到数据比对,如果是判断数据是否等于某个值,这就很简单,调用函数或者直接用'=='判断,假如是判断数据是否符合某些规范,这个写起来就很难,且单纯用代码判断会产生非常大的工作量,这是就可以使用正则表达式来进行匹配。
	eg:
        # 判断用户输入手机号是否合法
        phone_number = input('请输入手机号>>>').strip()
        # 判断是否是11位
        if len(phone_number) == 11:
            # 判断是否是纯数字
            if phone_number.isdigit() == True:
                # 判断是否是正确的电话号码开头
                if phone_number.startswith('13') or phone_number.startswith('15') or phone_number.startswith(
                        '17') or phone_number.startswith(18):
                    print('验证通过')
                else:
                    print('手机号是假的吧')
            else:
                print('不是纯数字,火星号码吧')
        else:
            print('你这号码字数都不对啊')
		
        # 正则表达式判断输入号码是否合法
        import re

        phone_number = input('请输入手机号>>>').strip()
        if re.match('^(13|15|17|18)[0-9]{9}$', phone_number):
            print('验证通过')
        else:
            print('输的什么鬼,再输100遍')
            
'''
作用:正则表达式就是用来做字符匹配的,用来筛选符合规范的字符
本质:正则表达式本质是一些特殊符号的组合体,通过不同功能的符号组合,划出我们想要的范围,再使用数据去匹配,符合的数据就留下
'''

正则匹配在线测试网站:http://tool.chinaz.com/regex/

正则表达式之字符组

字符组 作用
[0123456789] 匹配0-9间任意数字
[0-9] 匹配0-9间任意数字(简写)
[a-z] 匹配a-z间任意字母
[A-Z] 匹配A-Z间任意字母
[0-9a-zA-Z] 混合使用,可以匹配任意数字和字母

单个字符组默认一次只匹配一个字符

正则表达式之特殊符号

特殊符号 作用
. 匹配除换行符以外的任意字符
\w 匹配数字、字母、下划线(后续筛选变量名可能用到)
\d 匹配任意的数字
\t 匹配一个制表符(tab键)
^ 匹配字符串的开始
$ 匹配字符串的结尾
\W 匹配非字母或数字或下划线
\D 匹配非数字
a|b 匹配a或者b 管道符就是or(或)的意思
() 给正则表达式分组 不影响正则匹配(后续再讲)
[] 字符组的概念(里面所有的数据都是或的关系)
[^] 上箭号出现在了中括号的里面意思是取反操作

特殊符号一次也只匹配一个字符

正则表达式之量词

量词 作用
* 重复零次或者多次(默认就是多次:越多越好)
+ 重复一次或者多次(默认就是多次:越多越好)
? 重复零次或者一次(默认就是一次:越多越好)
重复n次
重复最少n次最多多次(越多越好)
重复n到m次(越多越好)

量词必须跟在表达式的后面 不能单独使用 目的是增加匹配的字符数

量词默认是贪婪匹配(尽可能多的匹配字符数)

复杂正则匹配编写:(判断身份证号是否合法)

# 我国的身份证号有两种,一代身份证15位,全是数字组成,二代身份证18位,前17位全由数字组成,最后一位可能是数字也可能是x
# 我国的身份证号有两种,一代身份证15位,全是数字组成,二代身份证18位,前17位全由数字组成,最后一位可能是数字也可能是x
import re

res = '[^0][0-9]{14}|[^0][0-9]{16}([0-9]|x)'
id_card = input('请输入身份证号>>>').strip()
if re.match(res,id_card):
    print('验证通过')
else:
    print('假证')
    
[^0][0-9]{14}:非0开头,后14位是0-9之间
[^0][0-9]{16}([0-9]|x):非0开头,后16位是0-9,最后一位是0-9或x   
    
'''常用的正则表达式可以去百度查'''

取消转义

# \n是换行符的意思,我们想匹配\n会失败,当遇到\时,再写一个\即可取消转义
eg:
    \n			False
    \\n			True		\n
    \\\\n		True		\\n
# 每一个斜杠都需要一个斜杠进行转义
# 在python中还可以再字符串前面加r进行转义

贪婪匹配和非贪婪匹配

贪婪匹配:尽可能多的去拿字符,正则表达式默认贪婪匹配
    典型:.*
非贪婪匹配:尽可能少的去拿字符
    典型:.*?

re模块

python中无法直接使用正则表达式,需要借助于模块
	1. 内置模块(re)
    2. 第三方模块
方法 作用
findall(正则表达式,待匹配文本) 筛选并返回所有符合条件的数据,并组织成列表
search(正则表达式,待匹配文本) 查到一个符合条件的数据就结束,没有查到返回None
group(num) 用于返回的数据,进行分组,没有数据会报错,num第几组
match(正则表达式,待匹配文本) 查到一个符合条件的数据就结束,没有查到返回None
finditer(正则表达式,待匹配文本) 查询结果是一个迭代器

posted @ 2022-03-28 18:02  程序猿伞兵一号  阅读(39)  评论(0)    收藏  举报