[2022.7.19] 正则表达式相关内容(贪婪匹配 ,非贪婪匹配)
学习内容概要
- 正则表达式
- 正则表达式之字符组
- 正则表达式之特殊符号
- 正则表达式之量词
- 正则表达式练习题
- 贪婪匹配与非贪婪匹配
- 取消转义
- 正则表达式实战
正则表达式
-
摘要:该知识点 不属于任何一门编程语言 是独立的学科
正则表达式是一种被用于从文本中检索符合某些特定模式的文本
主要是用于数据的查找于筛选
1.正则表达引导作业
需求:编写代码校验 用户输入的手机号是否合法
首先用python代码去编写功能:
phone_num = input('快输入号码>>>:').strip()
if phone_num.isdigit():
if len(phone_num) == 11:
if phone_num.startswith('13')or phone_num.startswith('15')or phone_num.startswith('17') or phone_num.startswith('18')or phone_num.startswith('19'):
print('手机号输入合法')
print(int(phone_num))
else:
print('手机号输入不合法')
else:
print('手机号必须是11位')
else:
print('手机号必须是纯数字')
# 用正则表达式去写入:
import re
phone_num = input('快点垃圾号码输入下吧>>>:').strip()
if re.match('^[13|15|17|18|19][0_9]{9}',phone_num):
print(phone_num)
else:
print('输入手机号不能用')
总结:
正则表达式本质上就是使用一些符号的组合产生一些特殊的含义
然后去字符串中筛选出符合条件的数据
正则表达式之字符组
- 正则表达式 在线测试网址:http://tool.chinaz.com/regex/
字符组 | 作用 |
---|---|
[0-9] | 可以匹配0到9之间任意一个数据值(包括0和9) |
[A-Z] | 可以匹配A到Z之间任意一个数据值(包括A和Z) |
[a-z] | 可以匹配a到z之间任意一个数据值(包括a和z) |
[0-9a-zA-Z] | 可以匹配0-9和a-z和A-Z之间任意一个数据值 |
注意: | 字符组在没有量词修饰的情况下一次只针对一个数据值 |
正则表达式之特殊符号
特殊符号 | 作用 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线 |
\W | 匹配非字母或数字或下划线 |
\d | 匹配数字 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
^ 数据 & | ^ 与$组合来用 能够明确的限制查找的具体数据 这个数据既要在开头也要在结尾 只能是单数据 ^1$ |
a|b | 匹配字符a或字符b的意思 管道符:| 在很多的场景下表达的意思都是 或 |
( ) | 给正则表达式分组 不影响正常的匹配 |
[ ] | 匹配字符组中的字符 |
[ ^] | 匹配除了字符组中字符的所有字符 |
注意: | 特殊符号在没有量词修饰的情况下一次只针对一个数据值 |
正则表达式之量词
- 量词不能单独使用 必须跟在表达式的后面 并且只能影响紧挨着的左边那一个
量词 | 作用 |
---|---|
* | 重复零次或者更多次(默认就是尽可能多次) |
+ | 重复一次或者更多次(默认就是尽可能多次) |
? | 重复一次或者更多次(默认就是一次) |
重复n次 | |
重复n次到很多次 | |
重复n次到m次 | |
注意: | 在正则表达式中所有的量词默认都是贪婪匹配(尽可能多的) |
正则表达式练习题
正则 | 带匹配字符 | 匹配结果 |
---|---|---|
海. | 海燕海娇海东 | 海燕海娇海东 |
^海. | 海燕海娇海东 | 海燕 |
海.$ | 海燕海娇海东 | 海东 |
李.? | 李杰和李莲英和李二棍子 | 李杰 李莲 李二 |
李.* | 李杰和李莲英和李二棍子 | 李杰和李莲英和李二棍子 |
李.+ | 李杰和李莲英和李二棍子 | 李杰和李莲英和李二棍子 |
李. | 李杰和李莲英和李二棍子 | 李杰和 李莲英 李二棍 |
李[杰莲英二棍子]* | 李杰和李莲英和李二棍子 | 李杰 李莲英 李二棍子 |
李[^和]* | 李杰和李莲英和李二棍子 | 李杰 李莲英 李二棍子 |
贪婪匹配与非贪婪匹配
-
待匹配的文本:
love(888) -
(贪婪匹配) 正则表达式:<.*>
上述正则匹配出来的内容是:
love(888) -
(非贪婪匹配)正则表达式:<.*?>
上述正则匹配出来的内容是:
-
注意:
所有的量词默认都是贪婪匹配 但是如果在量词的后面紧跟一个问号
那么就会变成非贪婪匹配小技巧:以后我们在使用贪婪匹配或者非贪婪匹配的时候一般都是用.或者.?
并且结束的标志有上述符号左右两边添加的表达式决定
取消转义
-
正则表达式中取消斜杠与字母的特殊含义 就是在斜杠前面加斜杠
正则表达式 待匹配字符 \n \n \\\n \n -
在python中有更加简便的写法 添加 r 需要文件路径转义
r'\n' r'\\n'
正则表达式实战
# 多种表达式:
编写校验用户手机号的正则
0?(13|14|15|17|18|19)[0-9]{9}
编写校验用户身份证的正则
\d{17}[\d|x]|\d{15}
编写校验用户邮箱的正则
\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}
编写校验用户qq号的正则
[1-9]([0-9]{5,11})
编写日期(MM/DD/YYYY)的正则:
^(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2}$
编写网址的正则:
^(((http|https|ftp):\/\/)?([[a-zA-Z0-9]\-\.])+(\.)([[a-zA-Z0-9]]){2,4}([[a-zA-Z0-9]\/+=%&_\.~?\-]*))*$
-
总结:
常见的正则百度查找即可 我们需要做到的时候能够看到别人写的
能够完成基础的修改即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)