Python正则表达式

一、基础匹配

1、什么是正则表达式

正则表达式:又称规则表达式(Regular Expression),是使用单个字符串来描述、匹配某个句法规则的字符串,常被用来检索、替换那些符合某个模式(规则)的文本。
简单来说,正则表达式就是使用字符串定义规则,并通过规则去验证字符串是否匹配。
比如,验证一个字符串是否是符合条件的电子邮箱地址,只需要配置好正则规则,即可匹配任意邮箱。比如通过正则规则:()即可匹配一个字符串是否是标准邮箱格式,但如果不使用正则,使用if else来对字符串做判断就非常困难了。

2、正则的三个基础方法

Python正则表达式使用re模块,并基于re模块中的三个基础方法来做正则匹配。分别是:match、search、findall三个基础方法。

  • re.match(匹配规则,被匹配字符串)
    从被匹配字符串开头进行匹配,匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回空。
import re

s = 'python itheima python itheima python itheima'

result = re.match('python', s)
print(result)  # <re.Match object; span=(0, 6), match='python'>
print(result.span())  # (0, 6) 匹配成功,所在字符串下标0-6(不含)
print(result.group())  # python 匹配成功,匹配到的字符串是python

s = '1python itheima python itheima python itheima'
result = re.match('python', s)
print(result)  # None(匹配失败)
  • search(匹配规则,被匹配的字符串)
    搜索整个字符串,找出匹配的。从前向后,找到第一个后,就停止,不会继续向后,整个字符串都找不到,返回None
s = '1python itheima python itheima python itheima'
result = re.match('python', s)
print(result)  # None(匹配失败)

s = '1python666itheima666python666'
result = re.search('python', s)
print(result)  # <re.Match object; span=(1, 7), match='python'>
print(result.span())  # (1, 7) 匹配成功,所在字符串下标1-7(不含)
print(result.group())  # python 匹配成功,匹配到的字符串是python

# 整个字符串都找不到,返回None
s = 'itheima666'
result = re.search('python', s)
print(result)  # None
  • findall(匹配规则,被匹配字符串)
    匹配整个字符串,找出全部匹配项,找不到返回空list:[]
s = '1python666itheima666python666'
result = re.findall('python', s)
print(result)  # ['python', 'python']
result = re.findall('itcast', s)
print(result)  # []

3、总结

在这里插入图片描述

二、元字符匹配

在刚刚我们只是进行了基础的字符串匹配,正则最强大的功能在于元字符匹配规则。

1、单字符串匹配

在这里插入图片描述

import re

# 找出全部数字
s = "黑马itheima @@python2 !!666 ##itcast3"

result = re.findall(r'\d', s)  # 字符串前面带上r的标记,表示字符串中转义字符无效,就是普通字符的意思
print(result)  # ['2', '6', '6', '6', '3']

# 找出特殊字符
result = re.findall(r'\W', s)
print(result)  # [' ', '@', '@', ' ', '!', '!', ' ', '#', '#']

# 找出全部英文字母
result = re.findall(r'[a-zA-Z]', s)
print(result)  # ['i', 't', 'h', 'e', 'i', 'm', 'a', 'p', 'y', 't', 'h', 'o', 'n', 'i', 't', 'c', 'a', 's', 't']

注意:字符串的r标记表示,字符串内转移字符无效,作为普通字符使用。

2、数量匹配

在这里插入图片描述

3、边界匹配

在这里插入图片描述

4、分组匹配

在这里插入图片描述

5、案例

在这里插入图片描述

# 匹配账号
r = r'^[0-9a-zA-Z]{6,10}$'
s = "012345678"
print(re.findall(r, s))  # ['012345678']
# 匹配QQ号
r = r'^[1-9][0-9]{4,10}$'
s = "1123456"
print(re.findall(r, s))  # ['1123456']
# 匹配邮箱地址
# {内容}.{}.{}@{内容}.{内容}
r = r'(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)'
s = "abc.bcd.efg@qq.com.cn"
print(re.findall(r, s))  # [('abc.bcd.efg@qq.com.cn', '.efg', 'qq', '.cn')] ()分组匹配,将括号中字符作为一个分组
print(re.match(r, s))  # <re.Match object; span=(0, 21), match='abc.bcd.efg@qq.com.cn'> 不想匹配其他()的组,可以用match
s = "abc.bcd@126.com"
print(re.match(r, s))  # None

参考:黑马程序员Python教程,Python从入门到精通(2022版)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坚持写博客的正

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值