You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式:如何从字符串末尾匹配指定<p>标签段

反向定位目标<p>标签的解决方案

遇到这种正向匹配优先捕获靠前内容的问题,反向查找确实是最直接的思路!下面分两种场景(解码前后的字符串)给你具体实现方法:

场景1:先解码HTML实体(推荐,更直观)

你的原始字符串是经过HTML转义的,先把它解码成正常的HTML结构会更容易处理:

import html

# 原始转义字符串
original_str = "TEXT&nbsp;&lt;p&gt;TEST1&lt;/p&gt;&lt;br&gt;&lt;div&gt;&amp;nbsp;&lt;p&gt;TEST2&lt;/p&gt;&lt;/div&gt;"
# 解码HTML实体
decoded_str = html.unescape(original_str)

解码后得到:TEXT&nbsp;<p>TEST1</p><br><div>&nbsp;<p>TEST2</p></div>

接下来用**反向查找(rfind)**精准定位:

  1. 先找到结尾的</p></div>的位置
  2. 从该位置往前找最近的<p>标签
  3. 验证这段内容包含TEST2后提取

代码实现:

end_tag = "</p></div>"
end_pos = decoded_str.rfind(end_tag)

if end_pos != -1:
    # 从结尾标签往前找第一个<p>的起始位置
    start_pos = decoded_str.rfind("<p>", 0, end_pos)
    if start_pos != -1 and "TEST2" in decoded_str[start_pos:end_pos + len(end_tag)]:
        target_content = decoded_str[start_pos:end_pos + len(end_tag)]
        print(target_content)  # 输出:<p>TEST2</p></div>

场景2:直接处理转义后的原始字符串

如果不想解码,也可以针对转义后的标签字符写正则,用贪婪匹配+捕获组直接提取最后一段符合条件的内容:

正则表达式(匹配转义后的<p>TEST2</p></div>):

.*(&lt;p&gt;TEST2&lt;/p&gt;&lt;/div&gt;)

解释:

  • .* 贪婪匹配所有前面的内容(确保我们拿到最后出现的目标片段)
  • 捕获组(&lt;p&gt;TEST2&lt;/p&gt;&lt;/div&gt;)就是我们要的完整标签内容

Python代码实现:

import re

original_str = "TEXT&nbsp;&lt;p&gt;TEST1&lt;/p&gt;&lt;br&gt;&lt;div&gt;&amp;nbsp;&lt;p&gt;TEST2&lt;/p&gt;&lt;/div&gt;"
pattern = r".*(&lt;p&gt;TEST2&lt;/p&gt;&lt;/div&gt;)"
match = re.search(pattern, original_str)

if match:
    print(match.group(1))  # 输出:&lt;p&gt;TEST2&lt;/p&gt;&lt;/div&gt;

核心思路总结

  • 反向查找(rfind):从目标结尾标签出发,向前扫描找到最近的起始标签,避免正向匹配的优先捕获问题
  • 贪婪正则:通过.*吃掉所有前面的内容,只保留最后一个符合条件的目标片段,精准捕获你要的TEST2对应的标签组

内容的提问来源于stack exchange,提问作者Yu Mad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:37:50