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

python基础10正则表达式

正则就是字符串处理的瑞士军刀

之前我们是通过if判断来匹配某个字符串,不灵活,太死板了

手机号码匹配,就是有些网站是通过手机号登录的,就是通过这个正则来实现的

电子邮件等应用场景

使用正则就必须使用这个re模块,内置模块,直接导入,不需要下载

re模块核心的函数

1、re.findall(pattern,string,flags=0)

功能:在整个字符串中查找所有匹配项,返回列表(包含所有匹配结果)

场景:批量提取文本中的目标内容(如所有邮箱、所有数字)

参数详解:

  • pattern 就是匹配的内容,要找的这个内容

  • string 匹配的对象,就是从这个对象里面找我需要的内容,必须是字符串


import  res1 = "pythonqwerpython"result = re.findall("python",s1)
print(result)# 输出结果为,返回的是一个列表
['python', 'python']# 匹配失败,返回的是一个空列表result = re.findall("qc",s1)
print(result)# 输出结果为
[]

2、re.match(pattern,string,flags=0)

功能:从字符串开头匹配正则表达式,仅返回第一个结果

- 只会从最开头开启匹配,只管最前面,匹配的内容在中间也会匹配失败,必须在开头

返回值:匹配成功返回的是一个match对象,失败返回none

match对象常用的方法:

  • span(): 返回匹配的起始和结束的索引,也就是匹配到第一个的切片(元组:(start,end))

  • group(): 返回匹配的整个字符串,就是返回匹配的内容

  • groups(n): 返回第n个分组的内容(n从1开始)


s2 = "pythonqwerpython"result = re.match("python",s2)print(result)
# 返回的是一个对象
<re.Match object; span=(0, 6), match='python'>print(result.span())# 返回第一个匹配到内容的切片
(0,6)print(result.group())# 返回匹配到的内容
python# match是从开头就开始匹配的,非常精确的匹配s2 = "qwerpython"  result = re.match("python",s2)print(result)# 输出结果为,没有匹配到,从开头就开始匹配了
None

3、re.search(pattern,string,flags=0)

功能:在整个字符串查找第一个匹配项(不限制开头了)

返回值:也是返回一个匹配对象,

区别match, match仅匹配开头,search匹配任意位置,就是从头匹配到尾

方法:

  • span()

  • group()

s4 = "pythonqwertpython"print(re.search("python",s4))# 返回一个对象
<re.Match object; span=(0, 6), match='python'>print(re.search("python",s4).group())# 返回第一个匹配的到的内容# 和match最不同的方式,从头开始匹配到尾,输出第一次匹配到的内容s5 = "qwerpython"
print(re.search("python",s5).group())# 输出结果为
python

上面匹配的内容都是写死的,因此我们需要使用正则来实现这个灵活性

元字符和量词

元字符是正则表达式的语法符号,量词用于控制字符重复次数,结合使用

  • 查什么

  • 差多少

普通字符(直接匹配)

字母、数字,下划线等普通字符,直接匹配本身

示例;"abc" 匹配 字符串中的"abc", 123 匹配 123, "_" 匹配 "_"

核心特殊元字符(需要掌握)

元字符

查什么,就是匹配的内容

元字符 含义 示例
. 匹配任意单个字符(除了换行符\n) "a.b"匹配aab,a和b之间任意字符都匹配
^ 匹配字符串开头 ^abc匹配abc123,不匹配xabc
$ 匹配字符串末尾的 n$ 匹配字符串末尾是n的
[] 匹配括号里面任意一个字符,支持范围[a-z],排除[^a-z] "[abc]"匹配a,b,c三个字符
[^] 否定字符集,匹配括号外的任意字符 [^abc] 匹配除了a/b/c外的字符
() 分组:将括号内内容视为整体,可用于提取子串、反向引用 "(ab)+" 匹配 "ab"/"abab""(a)(b)" 可通过 \1/\2 引用
| 或:匹配左右任意一个表达式(优先级较低,需配合分组使用) "a|b" 匹配 "a"/"b""(ab)|(cd)" 匹配 "ab"/"cd"
\ 转义字符:将特殊字符转为普通字符(如 \. 匹配 . "\." 匹配 ".""\*" 匹配 "*""\\n" 匹配换行符
\d 等价于[0-9],匹配任意数字 \d+ 提取字符串中所有数字
\D 等价于[^0-9]匹配非数字 \D+ 提权字符串非数字字符内容
\s 等价于[\t\n\r\f] 匹配看=空白字符(空格,制表符,换行等) \s匹配字符串中的空格
\S 等价于[^\t\n\t\f] 匹配非空白字符 \S 匹配非空白字符
\w 等价于[a-zA-Z0-9_] 匹配字母,数字,下划线 \w+ 匹配单词(含下划线)
\b - 匹配单词边界(单词与非单词的分隔)
\B - 匹配非单词边界

元字符案例


p1 = "abcdefgqwer"print(re.findall(".",p1))  # 在整个字符串中匹配任意的单个字符,也就是全部匹配到了# 返回结果为
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'q', 'w', 'e', 'r']

量词(控制重复次数)

量词

查多少次

表示匹配前一个字符出现的次数的控制,支持贪婪和非贪婪模式,是正则的核心特性之一

元字符和量词配合使用,效果最佳

默认所有量词都是贪婪,但是量词后面加上一个? 就是非贪婪,拿到第一个立刻停,绝不多拿

量词类型 语法 贪婪/非贪婪 含义 示例(匹配 a)
零次或多次 * 贪婪 重复 0 次或多次(优先最多) a* 匹配 ""/"a"/"aaa"
零次或多次 *? 非贪婪 重复 0 次或多次(优先最少) a*? 优先匹配 ""
一次或多次 + 贪婪 重复 1 次或多次(优先最多) a+ 匹配 "a"/"aaa"
一次或多次 +? 非贪婪 重复 1 次或多次(优先最少) a+? 优先匹配 "a"
零次或一次 ? 贪婪 重复 0 次或 1 次(优先 1 次) a? 匹配 ""/"a"
零次或一次 ?? 非贪婪 重复 0 次或 1 次(优先 0 次) a?? 优先匹配 ""
精确次数 {n} 无(固定) 必须重复 n 次 a{3} 匹配 "aaa"
范围次数 {m,n} 贪婪 重复 m~n 次(优先 n 次) a{2,4} 匹配 "aa"/"aaa"/"aaaa"
范围次数 {m,n}? 非贪婪 重复 m~n 次(优先 m 次) a{2,4}? 优先匹配 "aa"
最少次数 {m,} 贪婪 至少重复 m 次(无上限,优先最多) a{2,} 匹配 "aa"/"aaa"
最多次数 {,n} 贪婪 最多重复 n 次(0~n 次,优先 n 次) a{,3} 匹配 ""/"a"/"aaa"

量词实战

主要就是这些符号的了解,符号的实战

r核心作用就是让字符串里的\表示普通字符,不被当成转义字符
r"\n"

分组

总结

re模块函数总结

re.findall 在整个字符串找到所有匹配的内容,返回一个列表

re.search 在整个字符串找到第一次匹配的内容,返回一个匹配的对象

re.match 从头就开始匹配,不符合就返回none,匹配成功就返回匹配的对象

http://www.jsqmd.com/news/864912/

相关文章:

  • 雷达流量计十大品牌对比:精度与抗干扰能力 - 仪表人叶工
  • 河北电力防污闪涂料有哪几家?3个核心热门问题解答:核心差异【2026最新整理】 - 速递信息
  • 2026年深圳FEDEX国际快递代理发货评测:三大服务商核心维度 - 元点智创
  • 数据炼金术:在浏览器中重塑信息形态的魔法工坊
  • 5分钟搞定Windows风扇控制:Fan Control终极免费散热优化方案
  • 株洲全域黄金回收权威指南|垚昌登韦茹禾林派连锁 资质齐全安全变现 - 润富黄金珠宝行
  • 最新:2026年国内微型涡街流量计十大品牌对比 - 仪表人叶工
  • QKeyMapper:重新定义Windows输入设备交互的开源解决方案
  • Supervisely完整指南:如何用Python SDK构建智能视觉应用
  • 2026年票务三辊闸选购:方略物联破解大客流核心痛点 - 速递信息
  • Unity工业级机械仿真:刚体约束链与运动学反解实战
  • 2026年青岛彩钻回收,合扬专业仪器检测不压分 - 李宏哲1
  • 5分钟快速上手:使用memtest_vulkan轻松搞定GPU显存稳定性测试
  • 【IEEE出版、连续六届稳定检索】第七届电气技术与自动控制国际学术会议(ICETAC 2026) - 爱写稿的小帅哥
  • 万通金券回收渠道全解析 - 购物卡回收找京尔回收
  • Unity Package Manager缓存失效排错指南
  • 面试官常问的医疗数据权限问题,这次终于讲明白了
  • Netty 第三篇:NioEventLoopGroup 是如何初始化的
  • 如何轻松实现U校园智能刷课?这个Python工具让你5分钟搞定
  • 探索Taotoken模型广场如何帮助开发者找到性价比更高的模型选项
  • Python AUTOSAR XML生成:从概念到实战的完整指南
  • 从600万到5000万,人员几乎没增加——一家CRO企业的项目成本管理进化史
  • ANI-RSS界面自定义终极指南:从零打造个性化追番体验
  • 深度解析OBS Mac虚拟摄像头插件的架构设计与性能优化
  • 润富黄金回收|2026年宁波黄金回收全攻略,正规渠道与避坑指南 - 润富黄金珠宝行
  • 航拍小目标检测|无人机巡检交通目标识别数据集10054期
  • 3DS Pokémon ROM 编辑器 pk3DS:新手入门完全指南
  • Motrix浏览器扩展终极指南:3分钟实现下载加速300%的免费方案
  • SQL注入实战:5次请求完成数据库结构侦察
  • 为什么你的浏览器需要一款真正的Markdown阅读伴侣