正则的应用场景:登录注册,填写表单
使用正则少不了 re 模块
re 模块的 findall 方法
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到则返回空列表
import re # 导入 re 模块
a = 'python123456123'
# re 模块中的方法 findall 有两个行惨(匹配对象,匹配的变量)
print(re.findall('1',a))
print(re.findall('pyt',a))
print(re.findall('123',a))
# 只能从左往右,不能隔开匹配
print(re.findall('pt',a))
F:\python\python.exe "D:\muyi\my python\练习.py"
['1', '1']
['pyt']
['123', '123']
[]
Process finished with exit code 0
re 模块的 match 方法
re.match 从字符串的起始位置匹配,匹配成功,返回对象信息及匹配对象,如果不是起始位置匹配则返回 None 为空
import re # 导入 re 模块
a = 'python123456123'
# re 模块中的方法 match 有两个行惨(匹配对象,匹配的变量)
print(re.match('pyth',a))
print(re.match('thon',a))
F:\python\python.exe "D:\muyi\my python\练习.py"
<re.Match object; span=(0, 4), match='pyth'>
None
Process finished with exit code 0
match 方法有两个功能 —— group 和 span
import re # 导入 re 模块
a = 'python123456123'
# re 模块中的方法 match 有两个行惨(匹配对象,匹配的变量)
print(re.match('pyth',a).group()) # 查看匹配的字符
print(re.match('python',a).span()) # 查看匹配的下标取值区间 —— 索引
F:\python\python.exe "D:\muyi\my python\练习.py"
pyth
(0, 6)
Process finished with exit code 0
re 模块的 search 方法
re.search 扫描整个字符串,匹配成功,返回一个匹配对象,包括匹配信息,search 只能匹配一个符合规则的对象,不会往下继续找
import re # 导入 re 模块
a = 'python123456123'
# re 模块中的方法 search有两个行惨(匹配对象,匹配的变量)
print(re.search('123',a))
print(re.search('1',a))
F:\python\python.exe "D:\muyi\my python\练习.py"
<re.Match object; span=(6, 9), match='123'>
<re.Match object; span=(6, 7), match='1'>
Process finished with exit code 0
search 方法有两个功能 —— group 和 span
import re # 导入 re 模块
a = 'python123456123'
# re 模块中的方法 search有两个行惨(匹配对象,匹配的变量)
print(re.search('123',a))
print(re.search('1',a))
# search 方法有两个功能 —— group 和 span
print(re.search('123',a).group()) # 查看匹配的字符
print(re.search('123',a).span()) # 查看匹配的下标取值区间 —— 索引
F:\python\python.exe "D:\muyi\my python\练习.py"
<re.Match object; span=(6, 9), match='123'>
<re.Match object; span=(6, 7), match='1'>
123
(6, 9)
Process finished with exit code 0
re 模块三个方法的区别
import re # 导入 re 模块
a = 'python123456123python'
print(re.findall('123',a)) # 匹配目标,返回所有相同匹配对象
print(re.match('python',a)) # 匹配目标,从起始开始,返回匹配对象信息及对象,只能匹配一个
print(re.search('123',a)) # 撇陪目标,返回匹配对象信息及对象,只能匹配一个
F:\python\python.exe "D:\muyi\my python\练习.py"
['123', '123']
<re.Match object; span=(0, 6), match='python'>
<re.Match object; span=(6, 9), match='123'>
Process finished with exit code 0
元字符
实战案例
写一个匹配手机的正则表达式
写一个匹配手机的正则表达式,需要注释每个元字符的作用
# r 取消转义字符
# \d 匹配数字,即0-9
# ^$ 匹配开头和结尾
sj = '18788688528' # 定义一个手机号
value = input('请输入你的手机号:')
tada = re.findall(r'^1[3-9]\d{9}$',value) # 匹配输入的手机号
# len 判断长度是否为11位
if len(value) != 11:
print('你输入的手机号不符合要求')
elif not tada: # 如果匹配不成功
print('请输入正确的手机号')
else:
print('输入成功')
写一个匹配邮箱的正则表达式
# 1、写一个匹配邮箱的正则表达式,需要注释每个元字符的作用
import re
# r 取消转义字符
# \d 匹配数字,即0-9
# ^$ 匹配开头和结尾
A = 0
while A < 3:
qq = input('请输入你的邮箱账号:')
a = re.findall(r'^\d{5,10}@qq.com$', qq) # 匹配qq号,至少5位,最多10位
if len(qq) == 0: # 判断QQ邮箱长度
print(f'邮箱不能为空,你还有{2 - A}次机会,请重新输入')
A += 1 # A的值叠加
if A >= 3:
print('你输入次数已达上限,即将退出')
elif a == []: # 匹配不成功则为 [] 空
print(f'请输入正确的邮箱,你还有{2 - A}次机会')
A += 1
if A >= 3:
print('输入错误已达上限,即将退出')
else:
print('输入正确')
break
F:\python\python.exe "D:\muyi\my python\练习.py"
请输入你的邮箱账号:
邮箱不能为空,你还有2次机会,请重新输入
请输入你的邮箱账号:1234567890
请输入正确的邮箱,你还有1次机会
请输入你的邮箱账号:1234567890@qq.com
输入正确
Process finished with exit code 0
匹配多个 :全选要匹配的代码 ,按快捷键 Ctrl+r 输入
(.*?):(.*) 匹配字段
'$1':'$2'