当前位置: 首页 > 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.lryc.cn/news/619225.html

相关文章:

  • mysql中的常见的索引类型及其特点
  • 前端css学习笔记3:伪类选择器与伪元素选择器
  • 开源!!! htop移植到OpenHarmony
  • 基于LLVM的memcpy静态分析工具:设计思路与原理解析(C/C++代码实现)
  • 实现文字在块元素中水平/垂直居中详解
  • tensorrt-llm0.20.0离线部署DeepSeek-R1-Distill-Qwen-32B
  • Apache POI中通过WorkBook写入图片后出现导出PDF文件时在不同页重复写入该图片问题,如何在通过sheet获取绘图对象清除该图片
  • 2787. 将一个数字表示成幂的和的方案数
  • 万物平台模型导入样例大全(实时更新中~)
  • 力扣面试150题--爬楼梯 打家劫舍 零钱兑换 最长递增子序列
  • 10. React组件间的通信
  • 某跨国金融机构法律法规自动文本摘要(ATS/文本大意提取)功能规划
  • Ansible 基础到实操笔记
  • scikit-learn/sklearn学习|岭回归python代码解读
  • 鸿蒙开发资源导航与学习建议
  • 计算机网络2-2:物理层下面的传输媒体
  • 第23章,景深:技术综述
  • 【Python办公】Mermaid代码转图片工具 - Tkinter GUI版本
  • Apache虚拟主机三种配置实战
  • 运维学习Day22——Anisible自动化与基本使用
  • JavaEE 初阶第十八期:叩开网络世界的大门
  • 随身WIFI每个月需要交钱吗?流量卡还是随身WIFI哪个更好用?正规随身WIFI品牌有哪些?谁才是真性价比之王?
  • 当“超级高速“遇见“智能大脑“:5G-A×AI如何重塑万物智联时代
  • Linux文件系统:从虚拟接口到物理实现的架构解析
  • 存储过程作为系统逻辑核心的架构思考 —— 以 SaaS 系统为例
  • 【ROS2】ROS2 基础学习教程 以lerobot-so100为例
  • 【前端:Html】--3.进阶:图形
  • 基于RAII的智能指针原理和模拟实现智能指针
  • Python函数篇:从零到精通
  • 能刷java题的网站