Skip to content

Latest commit

 

History

History
239 lines (151 loc) · 4.87 KB

462-281327-任意多次_贪婪_非贪婪_重复次数.sy.md

File metadata and controls

239 lines (151 loc) · 4.87 KB
show version enable_checker
step
1.0
true

时间日期

回忆

  • 上次了解了三个re的函数
    • search
    • findall
    • finditer
  • 三个元字符
    • . 任意非换行字符
    • ^ 匹配 开头位置
    • $ 匹配结束位置
  • 这开始和结束
    • 刚好和vim跳转一致
    • 你说巧不巧
  • 还有什么 元字符 呢?

查看帮助

图片描述

  • 贪婪匹配

      • 可能匹配着尽可能多的字符
  • 这如何理解?

匹配

import re

text = "cab celebrate banana abort"
pattern = r"a.*b"
matches = re.findall(pattern, text)

print(matches)
  • 结果

图片描述

  • .* 由于使用了贪婪匹配
    • 贪到了 足够多的字符
    • 总共就一个匹配
  • 如何理解greedy呢?

词源

图片描述

  • 因为hungry
    • 所以想吃的多 greedy

图片描述

  • 可以设置为非贪婪吗?

非贪婪

  • 如果*是贪婪的
    • *?就是非贪婪的

图片描述

  • 尝试修改代码

代码

图片描述

  • 非贪婪后
    • 确实不止一个了

图片描述

  • 除了*?之外

图片描述

  • +? 和 ??是什么意思呢?

+

    • 匹配着0到任意多个字符

图片描述

    • 匹配着1到任意多个字符
  • 具体代码如何?

具体代码

图片描述

  • 结果

图片描述

  • 理解

图片描述

  • 可以非贪婪吗?

非贪婪

图片描述

  • 结果

图片描述

  • 不包含cab中的ab
    • 因为+至少一个字符

图片描述

  • 是什么意思呢?

?

  • a.?b代表
    • a和b之间有0个或1个字符

图片描述

  • 具体应用呢?

应用

图片描述

  • 结果

图片描述

  • abb入选
    • 说明目前是贪婪模式

图片描述

  • 改成非贪婪模式后

图片描述

  • ab入选
    • 而不是abb
  • 还有什么关于字符数量的描述吗?

描述

  • 大括号{}
    • {m,n}
      • 从m到n个重复 贪婪
    • {m,n}?
      • 从m到n个重复 非贪婪

图片描述

  • m、n都包括吗?

测试

图片描述

  • .{0,3}
    • 0-3个任意字符

图片描述

  • 如何匹配0个重复的ab呢?

非贪婪

图片描述

  • 使用非贪婪后
    • 可以匹配ab

图片描述

  • {0,3}中可以省略0吗?

结果

图片描述

  • 省略0后
    • 效果不变
  • 说明前面的0可以省略
  • 可以省略后面的3吗?

省略后

图片描述

  • 结果改变

图片描述

  • {,3} 0到3个重复
  • {,} 0到任意多个重复
    • 就是*

对应关系

符号 对应关系
* {,}
+ {1,}
? {0,1}
  • 以上为贪婪匹配
符号 对应关系
*? {,}?
+? {1,}?
?? {0,1}?
  • 以上为非贪婪匹配

总结🤔🤔

  • 这次了解了正则表达式的重复次数
    • {m,n} 重复m到n次
      • 零到任意多次
      • 一到任意多次
    • ? 零次或一次
  • 还了解了 贪婪和 非贪婪
    • 贪婪匹配 尽可能多的字符
    • 非贪婪匹配 尽可能少的字符 后面加?
  • 正则表达式还有什么可以研究的呢?🤔
  • 下次再说👋🏻