当前位置: 首页 > article >正文

Python基础(九)——正则表达式

6.正则表达式

(1)基础匹配

使用re模块

  • match方法:

re.match(匹配规则,被匹配字符串)

从被匹配字符串开头进行匹配,成功则返回匹配对象包含的信息,失败则返回None。

s = "today is a beautiful day"
result = re.match("today", s)
print(result)
"""
输出:
<re.Match object; span=(0, 5), match='today'>
"""
s = "today is a beautiful day"
result = re.match("day", s)
print(result)
"""
输出:
None
"""
  • search方法:

re.search(匹配规则,被匹配字符串)

从前向后搜索整个字符串,找到第一个匹配的字符串后停止。成功则返回匹配对象包含的信息,失败则返回None。

b = "Happy Mid-Autumn Festival,tumn"
result2 = re.search("tumn", b)
print(result2)
"""
输出:
<re.Match object; span=(12, 16), match='tumn'>
"""

  • findall方法:

re.findall(匹配规则,被匹配字符串)

搜索匹配整个字符串,找出全部匹配项,找不到则返回空list[]

b = "Happy Mid-Autumn Festival, tumn"
result2 = re.search("tumn", b)
print(result2)

result3 = re.findall("tumn", b)
print(result3)
"""
输出:
<re.Match object; span=(12, 16), match='tumn'>
['tumn', 'tumn']
"""
(2) 元字符匹配

【在正则中,代码不需要Python规范格式的空格】

代码功能
单字符匹配
.匹配任意1个字符,除了\n、.匹配点本身
[]匹配[]中例举的字符
\d匹配数字0-9
\D匹配非数字
\s匹配空白、空格、tab键
\S匹配非空白
\w匹配单词字符,a-z、A-Z、0-9,_
\W匹配非单词字符
数量匹配
*匹配前一个规则的字符出现0到无数次
+匹配前一个规则的字符出现1到无数次
?匹配前一个规则的字符出现0或1次
{m}匹配前一个规则的字符出现m次
{m,}匹配前一个规则的字符最少出现m次
{m,n}匹配前一个规则的字符出现m到n次
边界匹配
^匹配字符串开头
$匹配字符串结尾
\b匹配一个单词的边界
\B匹配非单词边界
分组匹配
|匹配左右任意一个表达式
()将括号中字符作为一个分组
a = "20240917.@qq.com!!!"
# r标记表示字符串中转义字符无效,为普通字符
result4 = re.findall(r'\W', a)
result5 = re.findall(r'[a-zA-Z]', a)
result6 = re.findall(r'[abcdqq]', a)

print(result4)
print(result5)
print(result6)
"""
输出:
['.', '@', '.', '!', '!', '!']
['q', 'q', 'c', 'o', 'm']
['q', 'q', 'c']
"""

# 匹配账号,只能由字母和数字组成,长度限制6到10位
r = '^0-9a-zA-Z{6,10}$'
s = '25778&'
print(re.findall(r, s))

# 匹配QQ号,纯数字,长度5-11位,第一位不为0
m = '^[1-9][0-9]{4,10}$'
n = '012345855'
print(re.findall(m, n))

# 匹配邮箱地址,只允许qq、163、gmail三种类型邮箱
q = '(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)'

# 对于findall方法判断正则表达式时,如果有()分组,则会将每个分组的结果列出,可以使用()将整个表达式作为一组
# abc.qwe.asd@qq.com

记录学习心得的笔记,欢迎大家一起讨论,会持续更新


http://www.kler.cn/a/311401.html

相关文章:

  • 卸载一直显示在运行的应用
  • 快速学习Serde包实现rust对象序列化
  • springboot参数校验
  • Linux下useradd 和 adduser的区别
  • Go语言中的`io.Pipe`:实现进程间通信的利器
  • 【SpringBoot】18 上传文件到数据库(Thymeleaf + MySQL)
  • 软件工程中的耦合:类型、影响与优化策略
  • 索引的介绍
  • 【数据结构-差分】【hard】力扣995. K 连续位的最小翻转次数
  • 【RabbitMQ】重试机制、TTL
  • hku-mars雷达相机时间同步方案-软件驱动(MID360与海康MV-CB060-10UMUC-S)
  • 2-99 基于matlab多尺度形态学提取眼前节组织
  • 3 种自然语言处理(NLP)技术:RNN、Transformers、BERT
  • 0.5.4 知识库管理微调
  • Linux云计算 |【第四阶段】NOSQL-DAY1
  • C#和数据库高级:抽象类和抽象方法
  • kafka 一步步探究消费者组与分区分配策略
  • Reactor介绍,如何从简易版本的epoll修改成Reactor模型(demo版本代码+详细介绍)
  • YOLOv5/v8 + 双目相机测距
  • 学习大数据DAY58 增量抽取数据表
  • JavaWeb项目打包、部署至Tomcat并启动的全程指南(图文详解)
  • saltstack远程执行
  • 基于SpringBoot+Vue+MySQL的热门网络游戏推荐系统
  • 【网站架构部署与优化】web服务与http协议
  • 十大排序算法的特点及应用场景
  • 英飞凌最新AURIX™TC4x芯片介绍