正则表达式
正则表达式
正则表达式的作用
# 在日常开发中,我们在很多地方会用到数据比对,如果是判断数据是否等于某个值,这就很简单,调用函数或者直接用'=='判断,假如是判断数据是否符合某些规范,这个写起来就很难,且单纯用代码判断会产生非常大的工作量,这是就可以使用正则表达式来进行匹配。
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(正则表达式,待匹配文本) | 查询结果是一个迭代器 |

浙公网安备 33010602011771号