正则使用方法
今日学习内容
- 正则表达式介绍
- 正则表达式基本使用
- 正在表达式特殊符号
- 正则表达式量词
- 正则表达式贪婪与非贪婪
- 正则表达式取消转义
- python内置模块之re模块
内容详细
正则表达式介绍
在一般网站的注册界面获取手机号:
有很多校验规则必须是11位的纯数字 并且必须是常规的手机号开头中国大陆的手机号[13,15,17,18,19] 那么 问题来了 我们能否用python来实现手机的校验功能 我们来试一下
phone_num = input('num:').strip
if len(phone_num) == 11:
if phone_num.isdingit():
if phone_num.startwith('13') or if phone_num.startwith('15') or phone_num.startwith('17') or phone_num.startwith('18')
print('这是一个正常的手机号')
else:
print('手机号开头不合法')
else:
print('手机号必须是纯数字')
else:
print('手机号必须是11位')
next 则表达式实现手机校验功能
import re
phone_number = input('输入手机号>>>>:').strip()
if re.match('^(16|14|15|17|18)[0-9]{9}$',phone_num):
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键)
^ 匹配字符串的开始
eg:^1 找9并且这个9必须在开头
$ 匹配字符串的结尾,常常与^连用
\w 匹配非数字、字母、下划线
\d 匹配非数字
a|b 匹配a或者b管道符就算是or(或)的意思
() 给正则表达式分组不影响正则匹配
[] 字符组的概念(里面所有数据都是or的关系)
[^] 上箭号出现在中括号里表示取反的意思
正则表达式之量词
量词使用必须紧跟在表达式后面 不能单独使用目的是未来增加匹配的字符数
量词为了多匹配所有经量使用贪婪匹配:
* 重复零次或者多次(默认多次:次数越多越好)
+ 重复一次或者多次(默认多次)
? 重复零次或者一次(默认一次,越多越好)
{n} 重复n次
{n,} 重复最少n次 或者是说上限n次
{n,m} 重复n到m次(越多越好)
上课老师讲的立体
表达式 文本
海. 海燕 # 取3条
海娇
海东 #只取海字开头
^海. 3 条 取海开头的一共三个
.表示尽量多取
海.$ .表示任意字符 $调取尾部海就一条
李.? 李杰和李莲英和李二棍子
李.* 李杰和李莲英和李二棍子 1条
李.+ 李杰和李莲英和李二棍子 1条
李.{1,2} 李杰和李莲英和李二棍子 3条
李[杰莲英二棍子]* 李杰和李莲英和李二棍子 3条
李[^和]* 李杰和李莲英和李二棍子 3条
\d+ 456bdha3 2条
复杂正则的编写
校验身份证
身份证号码是一个长度为15或18个字符的字符串,如果是15位则全部由数字组成,首位不能为0;如果是18位,则前17位全部是数字,末位可能是数字或x
^[1-9][0-9]{14}
^[1-9][0-9]{16}[0-9x]
取消转义
\n \n False
\\n \n True
\\\\n \\n True
在python中还可以在字符串的前面加r取消转义 更加方便
贪婪匹配与非贪婪匹配
正则贪婪匹配
<.*> <script>alert(123)<script>
1条 贪婪匹配
前面作为开始后的<>作为结束条件
<.*?> <script>alert(123)<script>
2条 非贪婪匹配
以第一个大括号的出现作为结束标志
量词默认都是贪婪匹配 如果想修改为非贪婪匹配 只需要在量词的后面加?即可
re模块
在python中无法直接使用正则 需要借助于模块
1. 内置re模块
2. 第三方的其他模块
import re
res = re.findall('a', 'jason oscar aaa') # findall(正则表达式,待匹配的文本)
print(res) # ['a', 'a', 'a', 'a', 'a'] # 结果是所有符合条件的数据 并且组织成了列表
res1 = re.search('a', 'jason oscar aaa') # search(正则表达式,待匹配的文本)
print(res1) # 查找到一个符合条件的数据就结束 没有则返回None
print(res1.group()) # a 没有则无法调用group() 直接报错
res2 = re.match('j', 'jason oscar aaa') # match(正则表达式,待匹配的文本)
print(res2) # None 从字符串的开头匹配 如果没有则直接返回None 类似于给正则自动加了^ 如果符合也只获取一个就结束
print(res2.group()) # j 没有则无法调用group() 直接报错
res3 = re.finditer('a', 'jason oscar aaa') # finditer(正则表达式,待匹配的文本)
print(res3) # 结果是一个迭代器对象 为了节省空间
print([obj.group() for obj in res3]) # ['a', 'a', 'a', 'a', 'a']
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 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)