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

正则表达式解析(二)

r"([一二三四五六七八九十]|步骤\s*\d|^\s*\d+\.)

1. “实例一” 正则匹配解释

含义概述

这个正则表达式用于检测文本内容(content)中是否包含至少三个步骤指示符(如中文步数、数字步骤或行首数字点)。具体来说:

  • 它使用 re.fi ndall 函数查找所有匹配的子串。
  • 如果匹配到的子串数量(len(...))大于或等于 3,则条件为真。
  • 正则表达式为:r"(第[一二三四五六七八九十]步|步骤\s*\d|^\s*\d+\.)"
  • 使用了 re.MU LTILINE 标志,这使得正则表达式中的 ^(行首锚点)能匹配每行的开头,而不仅仅是整个字符串的开头 。
正则表达式分解(详细解释)

正则表达式由三个主要模式组成,用 | 分隔,表示“或”逻辑(匹配任一模式):

  • 第[一二三四五六七八九十]步
    • 是字面字符。
    • [一二三四五六七八九十] 是一个字符类,匹配任一中文数字(如“一”、“二”等)。这表示匹配像“第一步”、“第二步”这样的字符串 。
  • 步骤\s*\d
    • 步骤 是字面字符。
    • \s* 匹配零个或多个空白字符(如空格、制表符)。* 是限定符,表示“零次或多次” 。
    • \d 匹配一个数字字符(等价于 [0-9])。这表示匹配像“步骤1”、“步骤 2”这样的字符串(允许有空格) 。
  • ^\s*\d+\.
    • ^ 是行首锚点。由于 re.MU LTILINE 标志,它匹配每行的开头(而不是整个字符串的开头) 。
    • \s* 同上,匹配零个或多个空白。
    • \d+ 匹配一个或多个数字(+ 是限定符,表示“一次或多次”)。例如,“123”会被匹配 。
    • \. 匹配字面点字符(. 需要转义,否则在正则中表示任意字符)。这表示匹配像“1.”、“ 2.”(行首数字后加点)这样的字符串 。
  • 整体逻辑re.fi ndallcontent 中搜索所有符合上述任一模式的子串,返回一个列表。然后检查列表长度是否 ≥3,以判断内容是否有完整的步骤结构(如教程或指南) .
注意事项
  • re.MU LTILINE 标志:如果没有这个标志,^ 只匹配整个字符串的开头;加上后,它匹配每行的开头,适用于多行文本 。
  • 贪婪匹配:\d+\s* 是贪婪匹配(默认行为,尽量匹配更多字符)。但在这个表达式中,由于模式较简单,没有非贪婪需求 。证据显示贪婪匹配可能导致效率问题,但这里影响不大 。
实例

假设 content 为以下文本(模拟一个多行步骤说明):

第一步:准备材料。
步骤 2:混合原料。
3. 加热混合物。
步骤4:冷却成品。
  • 匹配过程
    • re.fi ndall 搜索所有匹配:
      • “第一步”(匹配 第[一二三四五六七八九十]步)。
      • “步骤 2”(匹配 步骤\s*\d,注意空格被 \s* 匹配)。
      • “3.”(匹配 ^\s*\d+\.,因为 “3.” 在行首)。
      • “步骤4”(匹配 步骤\s*\d)。
    • 匹配列表:["第一步", "步骤 2", "3.", "步骤4"],长度为 4。
  • 结果len(...) >= 3 为真,表示内容具有步骤完整性。
  • 无效实例:如果 content 只有两个匹配(如 “步骤1” 和 “步骤2”),则条件为假。

2. “实例二” 正则匹配解释

re.search(r"!\[.*?\]\(http.*?\)|<img\s+src=['\"]http", content))
含义概述

这个正则表达式用于检测文本内容(content)中是否包含 Markdown 或 HTML 格式的图片链接。具体来说:

  • 它使用 re.se arch 函数查找第一个匹配的子串。
  • 如果找到任何匹配,bool(...) 返回 True,表示内容有图文结合(即包含图片)。
  • 正则表达式为:re.search(r"![.?](http.?)|<img\s+src=['“]http”, content))。
  • 不使用特殊标志,因此默认行为(如 . 不匹配换行符)。
正则表达式分解(详细解释)

正则表达式由两个主要模式组成,用 | 分隔,表示“或”逻辑(匹配任一模式):

  • !$$.*?$$ $http.*?$(Markdown 图片语法):
    • !$$ 匹配字面 “![”。
    • .*? 是非贪婪匹配:. 匹配任意字符(除换行符),*? 是限定符,表示“零次或多次,但尽量少匹配”(非贪婪模式)。这用于匹配图片描述文本(如 “alt text”)。
    • $$ $ 匹配字面 “](”。
    • http.*?http 是字面,.*? 同上,非贪婪匹配 URL 路径(如 "😕/example.com/image.png ")。这确保匹配到 URL 结束括号前。
    • $ 匹配字面 “)”。
    • 整体表示匹配 Markdown 图片语法,如 ![描述]
  • <img\s+src=['\"]http(HTML 图片标签):
    • <img 匹配字面 “<img”。
    • \s+ 匹配一个或多个空白字符(如空格或制表符)。+ 是限定符,表示“一次或多次” 。
    • src= 匹配字面 “src=”。
    • ['\"] 匹配单引号或双引号('")。
    • http 是字面,表示 URL 以 “http” 开头(确保是网络图片)。
    • 整体表示匹配 HTML 图片标签,如 <img src='[http://example.com/pic.png ](http://example.com/pic.png )'><img src="[http://example.com/pic.png ](http://example.com/pic.png )">
  • 整体逻辑re.se archcontent 中搜索第一个符合任一模式的子串。如果找到,则 bool(re.se arch(...)) 返回 True,表示内容有图片链接 .
注意事项
  • 非贪婪匹配.*? 用于避免贪婪问题(如匹配过多字符)。证据显示,贪婪匹配(.*)可能匹配到不想要的文本,而非贪婪(.*?)更精确 。但证据 2 和 6 解释一致:? 后缀使匹配“懒惰”。
  • 字符匹配限制. 默认不匹配换行符,所以如果图片描述或 URL 跨行,可能不匹配。证据中没有直接提到这点,但 说明 . 在无标志时不匹配换行符 。
  • 矛盾点处理:证据 6 提到 .*? 是非贪婪,而证据 9 强调 * 是贪婪,但这里 ? 后缀明确指定非贪婪,我以具体表达式为准 .
实例

假设 content 为以下文本(包含 Markdown 和 HTML 图片):

欢迎阅读教程!![示例图片](http://example.com/photo.jpg) 
更多内容:<img src="http://example.com/icon.png" alt="图标">
  • 匹配过程
    • re.se arch 搜索第一个匹配:
      • 遇到 “![示例图片]”,匹配 Markdown 模式(!$$.*?$$ $http.*?$)。
      • 如果只有 HTML 部分(如 <img src='[http://example.com/icon.png ](http://example.com/icon.png )'>),也会匹配第二个模式。
    • 匹配成功,re.se arch 返回一个 Match 对象,bool(...)True
  • 结果:返回 True,表示内容图文结合。
  • 无效实例:如果 content 只有文本或无图片链接(如 “这是纯文本”),则 re.se arch 返回 Nonebool(...)False

总结

  • “实例一” :检测内容是否有至少三个步骤指示符(中文步数、数字步骤或行首数字点),使用 re.fi ndall 计数 。
  • “实例二” :检测内容是否有 Markdown 或 HTML 图片链接,使用 re.se arch 判断存在性 。
  • 实例基于常见场景设计,实际应用中需根据具体内容调整。正则表达式依赖于 Python 的 re 模块,语法细节可参考证据(如字符类 、限定符 、标志 )。如果有更多问题,欢迎提供具体内容测试!
http://www.dtcms.com/a/327621.html

相关文章:

  • pdftk - macOS 上安装使用
  • 【读代码】深度解析 Researcher:开源自动化科研助手
  • 企业级AI大模型后端基础设施管理:从理论到实践的全链路指南
  • 5 重复匹配
  • WPS文字和Word:不只是表格,段落也可以排序
  • gpt-5与gpt-5-fast
  • 【新模型速递】PAI-Model Gallery云上一键部署gpt-oss系列模型
  • 一起来聊聊GPT-5
  • c++的四种类型转换(static_cast,reinterpret_cast,const_cast,dynamic_cast)详解和代码示例
  • 使用pyqt5实现可勾选的测试用例界面
  • B站 韩顺平 笔记 (Day 16)
  • 如何以开发者的身份开发出比python更好的应用软件?
  • 攻击者将Linux摄像头武器化为攻击工具,可注入击键并发动攻击
  • 使用reqwest+select实现简单网页爬虫
  • 《Fast Automatic White Balancing Method by Color Histogram Stretching》论文笔记
  • 小米宠物空气净化器好用吗?希喂/小米/范罗士核心性能深度对比
  • 5G专网项目外场常见业务测试指南(六)-PingInfoView
  • 力扣面试150(54/150)
  • 如何构建PHP表单页面及验证相关原理(PHP基础)
  • 六十、【Linux系统lvs应用】LVS简介 、 LVS-NAT集群 、 LVS-DR集群
  • 微服务ETCD服务注册和发现
  • 3 Abp 核心框架(Core Framework)
  • 过程设计工具深度解析-软件工程之详细设计(补充篇)
  • 数字孪生如何推动智慧园区精细化管理
  • CV 医学影像分类、分割、目标检测,之【皮肤病分类】项目拆解
  • OHEM (在线难例挖掘) 详细讲解
  • 【Vue.js】生产设备规划工具(报价单Word文档生成)【开发全流程】
  • 无人机航拍数据集|第14期 无人机水体污染目标检测YOLO数据集3000张yolov11/yolov8/yolov5可训练
  • etcd 备份与恢复
  • Etcd客户端工具Etcd Workbench更新了1.2.0版本!多语言支持了中文,新增了许多快捷功能使用体验再次提升