内容概要
- 正则表达式的前戏
- 字符组
- 特殊符号
- 正则表达式量词
- 贪婪匹配和非贪婪匹配
- 取消转义
- re模块
正则表达式前戏
| |
| |
| '''普通写法''' |
| |
| |
| user_phone = input('your mobile phone number>>>:').strip() |
| |
| while len(user_phone) == 11: |
| |
| if user_phone.isdigit(): |
| |
| if user_phone.startswith('13') or user_phone.startswith('15') or \ |
| user_phone.startswith('18') or user_phone.startswith('19'): |
| print('电话号码检验成功!') |
| break |
| else: |
| print('电话号码不合法!') |
| break |
| else: |
| print('电话号码必须纯数字!') |
| break |
| else: |
| print('电话号码必须11位!') |
| |
| |
| '''正则表达式''' |
| import re |
| user_phone = input('your phone>>>:').strip() |
| if re.match('^(13|15|18|19)\d{9}$', user_phone): |
| print('电话验证成功!') |
| else: |
| print('电话不存在或不合法!') |
| |
| """ |
| 正则表达式是一门独立的语言 专门用来匹配、校验、筛查所需的数据 |
| 任何编程语言都可以使用 在python中如果想用就必须借助于内置模块re |
| """ |
| 用自己的话概括>>>:什么是正则表达式 |
| 利用一些'特殊符号'的组合去字符串中筛选出想要的数据 |
| |
| 在匹配筛选查找数据的时候可以使用正则提供的符号也可以直接写目标数据 |
| 所以学习正则很大程度上就是在学习一些特殊符号的使用 |
| |
正则表达式字符组
在线测试网站: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次(越多越好) |
正则表达式的使用
表达式 |
文本 |
结果 |
鲤. |
鲤鱼红鲤鱼与绿鲤鱼 |
3条 |
^鲤 |
鲤鱼红鲤鱼与绿鲤鱼 |
1条 |
鲤.$ |
鲤鱼红鲤鱼与绿鲤鱼 |
1条 |
李.? |
李杰和李莲英和李二棍子 |
3条 |
李.* |
李杰和李莲英和李二棍子 |
1条 |
李.+ |
李杰和李莲英和李二棍子 |
1条 |
李. |
李杰和李莲英和李二棍子 |
1条 |
李[杰莲英二棍子]* |
李杰和李莲英和李二棍子 |
3条 |
李[^和]* |
李杰和李莲英和李二棍子 |
3条 |
| # 校验用户身份证号码 |
| 身份证号码是一个长度为15或18个字符的字符串,如果是15位则全部由数字组成,首位不能为0;如果是18位,则前17位全部是数字,末位可能是数字或x |
| ^[1-9][0-9]{14} |
| ^[1-9][0-9]{16}[0-9x] |
| |
| # 校验邮箱、快递单号、座机号... |
| """很多常见的正则校验符号 不需要我们编写 直接百度查找即可""" |
| |
| ps:百度的前提是自己能够看懂别人写的大致意思 |
| ^[1-9]\d{13,16}[0-9x]$ |
| ^[1-9]\d{14}(\d{2}[0-9x])?$ |
| ^([1-9]\d{16}[0-9x]|[1-9]\d{14})$ |
| |
贪婪匹配与非贪婪匹配
| |
| |
| <.*> <script>alert(123)<script> 1条 贪婪匹配 |
| 以最后一个大括号的出现作为结束标志 |
| |
| <.*?> <script>alert(123)<script> 2条 非贪婪匹配 |
| 以第一个大括号的出现作为结束标志 |
| |
| ''' |
| 量词默认都是贪婪匹配 如果想修改为非贪婪匹配 只需要在量词的后面加?即可 |
| 贪婪非贪婪通常都是利用左右两边的条件作为筛选依据 |
| ''' |
取消转义
| |
| |
| |
| \n \n False |
| \\n \n True |
| \\\\n \\n True |
| '''在python中还可以在字符串的前面加r取消转义 更加方便''' |
| |
re模块
| |
| |
| 1.内置的re模块 |
| 2.第三方的其他模块 |
| |
| import re |
| |
| res = re.findall('a', 'jason oscar aaa') |
| print(res) |
| |
| res1 = re.search('a', 'jason oscar aaa') |
| print(res1) |
| print(res1.group()) |
| |
| res2 = re.match('j', 'jason oscar aaa') |
| print(res2) |
| print(res2.group()) |
| |
| res3 = re.finditer('a', 'jason oscar aaa') |
| print(res3) |
| print([obj.group() for obj in res3]) |
| |
| obj = re.compile('\d+') |
| print(re.findall(obj,'asjd21hj13123j')) |
| print(re.findall(obj,'234328748hgjghj')) |
| print(re.findall(obj,'jhjhjh423432423')) |
| |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人