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

正则表达式补充——python

简介

        本章是对前面正则表达式的补充。

一、复杂的查找替换等任务

content = ''' 张三是脑卒中病
李四,是高血脂
苏齐,是肺结核病
六六,是血血血血'''

import re
p = re.compile(r'...病')
for one in p.findall(content):
    print(one)

运行结果:

代码分析:

  • r'...病' 是一个原始字符串正则表达式模式

  • . 在正则中表示任意单个字符(除换行符)

  • 三个连续的.表示匹配任意三个字符

  • 最后的是字面匹配

  • 整体模式匹配:四个字符的组合,前三个是任意字符,第四个必须是"病"

二、贪婪模式与非贪婪模式

1、贪婪模式

content = '<html><head>hello</head><title>Title</title></html>'

import re
p = re.compile(r'<.*>')
for one in p.findall(content):
    print(one)

运行结果:

代码分析:

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

  • < 匹配标签开始的左尖括号

  • .* 贪婪模式:匹配任意字符(尽可能多,直到最后一个 >

  • > 匹配标签结束的右尖括号

2. 匹配过程演示:

输入字符串:

<html><head>hello</head><title>Title</title></html>

匹配过程:

  1. 找到第一个 < → 位置0

  2. 贪婪匹配 .* → 直接跳到字符串末尾

  3. 反向回溯找到最后一个 > → 位置47

  4. 最终匹配整个字符串:<html>...</html>

2、非贪婪模式

content = '<html><head>hello</head><title>Title</title></html>'

import re
p = re.compile(r'<.*?>')
for one in p.findall(content):
    print(one)

运行结果:

代码分析:

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

    • < 匹配标签开始的左尖括号

    • .*? 非贪婪模式,匹配任意字符(尽可能少)

    • > 匹配标签结束的右尖括号

  2. 非贪婪匹配 ? 的关键作用:
    如果没有问号 <.*> 会匹配从第一个 < 到最后一个 > 的整个内容(贪婪匹配),但因为加了 ?,它会匹配最短可能的片段,即逐个匹配每个标签。

📌 关键总结
正则表达式模式结果适用场景
<.*>贪婪匹配整个字符串几乎不用于HTML解析
<.*?>非贪婪逐个匹配独立标签适合简单标签提取

三、常见问题与建议

1、特殊字符需要转义

# 错误写法(未转义.)
re.findall(r'www.example.com', text)  

# 正确写法(转义.)
re.findall(r'www\.example\.com', text)

2、处理多行文本

text = "第一行\n第二行\n第三行"
# 启用多行模式(^匹配每行开头)
re.findall(r'^第', text, flags=re.MULTILINE)  
# 输出: ['第', '第']

3、性能优化建议

  • 预编译正则表达式(尤其重复使用时):

pattern = re.compile(r'\d{5}')  # 提前编译
pattern.findall(text)

http://www.dtcms.com/a/122663.html

相关文章:

  • leetcode_707. 设计链表_java
  • Leetcode 34.在排序数组中查找元素的第一个和最后一个位置
  • 游戏引擎学习第211天
  • 毫米波测试套装速递!高效赋能5G/6G、新材料及智能超表面(RIS)研发
  • Stable Diffusion + CelebA-Dialog 数据集:不同数据集文本标签格式不一致?我的实验记录
  • python学智能算法(十)|机器学习逻辑回归(Logistic回归)
  • Django学习记录-2-数据库
  • mysql的下载和安装2025.4.8
  • 计算机网络——传输层(Udp)
  • Java 原型模式 详解
  • 如何在Linux系统上通过命令调用本地AI大模型?
  • qt之opengl使用
  • 【精品PPT】2025固态电池知识体系及最佳实践PPT合集(36份).zip
  • 移动端六大语言速记:第11部分 - 内存管理
  • ChatGPT 4:引领 AI 创作新时代
  • [ctfshow web入门] web29
  • 基于FreeRTOS和LVGL的多功能低功耗智能手表(硬件篇)
  • 微服务篇——SpringCloud
  • 【Ai/Agent】Windows11中安装CrewAI过程中的错误解决记录
  • Python如何用科技点亮触感世界——智能盲文翻译器开发全解析
  • SQL语句
  • 论文阅读笔记:Adaptive Multi-Modal Cross-Entropy Loss for Stereo Matching
  • 封装uniapp request promise化
  • 音视频生命探测仪,救援现场的“视听先锋”|鼎跃安全
  • 我们如何控制调度 C、C++ 中的线程执行?
  • HTTP 压力测试工具autocannon(AI)
  • 琴键上的强化学习:让机器人在真实世界里弹钢琴!
  • Spring如何实现资源文件的加载
  • 网络安全之-信息收集
  • 国内协作机器手焊接领域领军人物分析