正则表达式

正则表达式前戏

注册验证手机号
必须是11位的纯数字 并且必须是常规的手机号开头(13,15,17,18,19)
phone_nnum = input('请输入手机号:').strip()
if len(phone_nnum) == 11:
    if phone_nnum.isdigit():
        if phone_nnum.startswith('13') or phone_nnum.startswith('15') or phone_nnum.startswith('18') or phone_nnum.startswith('17'):
            print('正常手机号')
        else:
            print('请输入正确开头')
    else:
        print('不是纯数字')
else:
    print('手机号是十一位')
 
# 使用正则表达式
'''正则表达式实现手机校验功能'''
import re
phone_number = input('please input your phone number : ').strip()
if re.match('^(13|14|15|18)[0-9]{9}$', phone_number):
    print('是合法的手机号码')
else:
    print('不是合法的手机号码')

"""
正则表达式是一门独立的语言 专门用来匹配、校验、筛查所需的数据
任何编程语言都可以使用 在python中如果想用就必须借助于内置模块re
"""
用自己的话概括>>>:什么是正则表达式
  	利用一些'特殊符号'的组合去字符串中筛选出想要的数据

所以学习正则很大程度上就是在学习一些特殊符号的使用

正则表达式之字符串

在线测试网站:http://tool.chinaz.com/regex/
'''单个字符组默认一次只匹配一个字符'''

[0123456789]		匹配09之间的任意一个数字
[0-9]				匹配09之间的任意一个数字(简写)
[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,}			重复最少n次最多多次(越多越好)
{n,m}            重复n到m次(越多越好)

复杂正则的编写

# 校验用户身份证号码
 身份证号码是一个长度为1518个字符的字符串,如果是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})$

取消转义

\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'))  # 写一遍之后 直接反复调用即可

posted @   末笙  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示