正则表达式增补——python

[复制链接]
发表于 2025-9-29 20:36:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
简介

        本章是对前面正则表达式的增补。
一、复杂的查找更换等任务

  1. content = ''' 张三是脑卒中病
  2. 李四,是高血脂
  3. 苏齐,是肺结核病
  4. 六六,是血血血血'''
  5. import re
  6. p = re.compile(r'...病')
  7. for one in p.findall(content):
  8.     print(one)
复制代码
运行结果:

代码分析:


  • r'...病' 是一个原始字符串正则表达式模式
  • . 在正则中表现恣意单个字符(除换行符)
  • 三个连续的.表现匹配恣意三个字符
  • 末了的病是字面匹配
  • 团体模式匹配:四个字符的组合,前三个是恣意字符,第四个必须是"病"。

二、贪心模式与非贪心模式

1、贪心模式

  1. content = '<html><head>hello</head><title>Title</title></html>'
  2. import re
  3. p = re.compile(r'<.*>')
  4. for one in p.findall(content):
  5.     print(one)
复制代码
运行结果:

代码分析:
1. 正则表达式 <.*> 分解:


  • < 匹配标签开始的左尖括号
  • .* 贪心模式:匹配恣意字符(尽大概多,直到末了一个 >)
  • > 匹配标签竣事的右尖括号
2. 匹配过程演示:

输入字符串:
  1. <html><head>hello</head><title>Title</title></html>
复制代码
匹配过程:

  • 找到第一个 < → 位置0
  • 贪心匹配 .* → 直接跳到字符串末端
  • 反向回溯找到末了一个 > → 位置47
  • 终极匹配整个字符串:<html>...</html>

2、非贪心模式

  1. content = '<html><head>hello</head><title>Title</title></html>'import rep = re.compile(r'<.*?>')for one in p.findall(content):    print(one)
复制代码
运行结果:

代码分析:

  • 正则表达式 r'<.*?>' 分解:

    • < 匹配标签开始的左尖括号
    • .*? 非贪心模式,匹配恣意字符(尽大概少)
    • > 匹配标签竣事的右尖括号

  • 非贪心匹配 ? 的关键作用:
    假如没有问号 <.*> 会匹配从第一个 < 到末了一个 > 的整个内容(贪心匹配),但由于加了 ?,它会匹配最短大概的片断,即逐个匹配每个标签。
📌 关键总结 正则表达式模式结果实用场景<.*>贪心匹配整个字符串险些不消于HTML分析<.*?>非贪心逐个匹配独立标签恰当简朴标签提取
三、常见题目与发起

1、特别字符须要转义

  1. # 错误写法(未转义.)
  2. re.findall(r'www.example.com', text)  
  3. # 正确写法(转义.)
  4. re.findall(r'www\.example\.com', text)
复制代码
2、处置惩罚多行文本

  1. text = "第一行\n第二行\n第三行"
  2. # 启用多行模式(^匹配每行开头)
  3. re.findall(r'^第', text, flags=re.MULTILINE)  
  4. # 输出: ['第', '第']
复制代码
3、性能优化发起



  • 预编译正则表达式(尤其重复使用时):
  1. pattern = re.compile(r'\d{5}')  # 提前编译
  2. pattern.findall(text)
复制代码

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表