正则表达式
该知识点不属于任何一门编程语言 是一个独立的学科 主要用于数据的查找与筛选
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('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('您的输入不合法')
总结:
正则表达式本质上就是使用一些符号的组合产生一些特殊的含义,然后去掉字符串中筛选出符合条件的数据
正则表达式之字符组
. |
匹配换行符以外的任意字符 |
\w |
匹配字母或数字或下划线 |
\W |
匹配非字母或数字或下划线 |
\d |
匹配数字 |
^ |
匹配字符串的开头 |
$ |
匹配字符串的结尾(^与$的组合能够明确的限制想要查找的具体数据) |
a管道符b |
匹配字符a或字符b (管道符在很多场景下的意思是或) |
() |
给正则表达式分组不影响表达式的匹配<用于后续的正则起别名 分组获取对应数据> |
[] |
匹配字符组中的字符 |
[^] |
匹配除了字符组中字符的所有字符 |
正则表达式之量词
在正则表达式中所有的量词默认都是贪婪匹配(尽可能多的)
量词不能单独使用 必须跟在表达式的后面 并且只能影响紧挨着的左边那一个
* |
重复零次或更多次(默认就是尽可能多) |
+ |
重复一次或更多次(默认就是尽可能多) |
? |
重复零次或一次(默认就是一次) |
|
重复n次 |
|
重复n次或更多次 |
|
重复n到m次 |
正则表达式练习题
正则 |
待匹配字符 |
匹配结果 |
说明 |
海. |
海燕海娇海东 |
海燕海娇海东 |
匹配到所有“海”的字符 |
^海. |
海燕海娇海东 |
海燕 |
从开头匹配到“海.” |
海.$ |
海燕海娇海东 |
海东 |
只从末尾匹配的“海.$” |
李.? |
李杰和李莲英和李二棍子 |
李杰 李连 李二 |
?表示重复零次或一次,即只匹配“李”后面一个任意字符 |
李.* |
李杰和李莲英和李二棍子 |
李杰和李莲英和李二棍子 |
*表示重复零次或多次,即匹配到“李”后面0个或者多个任意字符 |
李.+ |
李杰和李莲英和李二棍子 |
李杰和李莲英和李二棍子 |
+表示重复一次或多次,即只匹配“李”后面1个或多个任意字符 |
李. |
李杰和李莲英和李二棍子 |
李杰和 李莲英 李二棍 |
{1,2}匹配1到2次任意字符 |
李 [杰莲英二棍子]* |
李杰和李莲英和李二棍子 |
李杰 李莲英 李二棍子 |
表示匹配“李”字后面[杰莲英二棍子]的字符任意次 |
李[^和]* |
李杰和李莲英和李二棍子 |
李杰 李莲英 李二棍子 |
表示匹配一个不是“和”的字符任意次 |
[\d] |
456bdha3 |
4 5 6 3 |
表示匹配任意一个数字,匹配到4个结果 |
[\d]+ |
456bdha3 |
456 3 |
表示匹配任意个数字,匹配到2个结果 |
贪婪匹配与非贪婪匹配
待匹配的文本<script>alert(123)</script>
正则表达式:<.*>
上述正则匹配出来的内容是:<script>alert(123)</script>
正则表达式:<.*?>
上述正则匹配出来的内容是:<script> </script>
'''所有的量词默认都是贪婪匹配 但是如果在量词的后面紧跟一个问号 那么就会变成非贪婪匹配
小技巧:以后我们在使用贪婪匹配或者非贪婪匹配的时候一般都是用.*或者.*?并且结束的标志有上述符号左右两边添加的表达式决定'''
取消转义
正则表达式中取消斜杠与字母的特殊含义 就是斜杠前面加斜杠
\\n \n \\\\n \\n
在python中有更加简便的写法
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})
"""
常见的正则百度查找即可
"""
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)