Skip to content

Latest commit

 

History

History
282 lines (187 loc) · 5.11 KB

463-594586-转义字符_小括号_中括号_大括号.sy.md

File metadata and controls

282 lines (187 loc) · 5.11 KB
show version enable_checker
step
1.0
true

时间日期

回忆

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

转义字符

  • \\
    • 转义字符
    • 转义序列

图片描述

  • 想要搜索元字符
    • 就需要使用\进行转义

具体

  • 想要搜索a*b
    • 需要对*进行转义
import re

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

print(matches)
  • 可以对于*进行转义
    • 设置模式a\*b
    • 查找到 a*b

图片描述

  • 如果模式是a\\*b 呢?

尝试

import re

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

print(matches)
  • 结果

图片描述

  • * 没有被转义
    • 含义为 前面的字符 (\)
    • 重复了0到任意多次0

中括号

  • []

图片描述

  • 暗示的是
    • 中括号里面的字符都可以

尝试

import re

text = "cab boat celebrate banana abort collect"
pattern = r"[abc]o"
matches = re.findall(pattern, text)

print(matches)
  • 运行结果

图片描述

  • 中括号里面的都可以
    • 中括号里 彼此之间是或者的关系
    • 有一个就行

再加数字

import re

text = "cab boat celebrate banana abort collect"
pattern = r"[abc]*o"
matches = re.findall(pattern, text)

print(matches)
  • 结果

图片描述

  • [abc]*
    • [abc] 中任意字符
      • 重复 零到任意多次
  • 如果改成非贪婪呢?

非贪婪

import re

text = "do cab boat celebrate banana abort collect"
pattern = r"[abc]*?o"
matches = re.findall(pattern, text)

print(matches)
  • 非贪婪效果

图片描述

  • ^所代表的complement set
    • 如何理解

补集

  • complement set
    • 指的是 补集
    • 列表中的元素 不被选择
    • 不在列表中的元素 才被选择

图片描述

  • abc不能被选择
    • abc以外的可以被选择

图片描述

  • 如果去掉非贪婪的?呢

去掉?

import re

text = "do cab boat celebrate banana abort collect"
pattern = r"[^abc]o"
matches = re.findall(pattern, text)

print(matches)
  • 运行结果

图片描述

| 或

图片描述

  • |在python中是

    • 位运算或
  • 此处处理或者的情况

设置

import re

text = "do cab boat celebrate banana abort collect"
pattern = r"cab|bo"
matches = re.findall(pattern, text)

print(matches)
  • 结果

图片描述

  • 想要cabt或者bot怎么写呢?

重写

import re

text = "do cab boat celebrate banana abort collect"
pattern = r"car|bor"
matches = re.findall(pattern, text)

print(matches)
  • car 或者 bor

图片描述

  • 可以理解为
    • ca 或 bo
    • 后面跟上r
    • 吗?

再重写

import re

text = "do cab boat celebrate banana abort collect"
pattern = r"(ca|bo)r"
matches = re.findall(pattern, text)

print(matches)
  • 结果

图片描述

  • 搜索到的是
    • 后面跟着r的
    • ca 或者 bo
  • 如何理解小括号呢?

查看帮助

  • 小括号

图片描述

  • 小括号 里面的是 子表达式

图片描述

finditer

import re

text = "do car boat celebrate banana abort collect"
pattern = r"(ca|bo)r"
matches = re.finditer(pattern, text)
for match in matches:
    print(match)
  • 查找到 2个匹配

图片描述

总结🤔

  • 这次了解了转义字符\
    • 转义字符 可以 原样引用 元字符
  • 还了解了 三种括号
符号 含义 例子 匹配 不匹配
小括号 括号内对应匹配的内容 c(ar) car中的ar bar中的ar
中括号 括号里面的字符都是可能出现的 c[ab] ca cc
大括号 控制范围 c{2,3} cc、ccc c
  • 正则表达式还有什么好玩的呢?🤔
  • 下次再说👋🏻