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

使用正则提取爬取的路透文章内容时BODY标签匹配失败是什么原因

匹配失败的核心原因
  • 捕获组仅支持单字符匹配:你写的(.)没有加任何量词,仅能捕获标签后的单个字符,完全无法覆盖多字符、多行的body内容。
  • .默认不匹配换行符:Python re模块默认模式下,.元字符不会识别\n换行符,而你的body内容存在多段换行,即使给.加了量词默认也匹配不到截止到</BODY>的完整内容。
  • 标签转义不匹配:如果你的原始文本没有经过HTML实体解码,尖括号会被转义为&lt;和&gt;,此时用<BODY>作为匹配规则无法命中转义后的标签内容。
  • 贪婪匹配溢出(可选优化项):如果使用.*做贪婪匹配,当文本中存在多个</BODY>标签时会匹配到最后一个标签的位置,超出预期范围。
修复方案

第一步(可选,推荐):先对原始文本做HTML实体解码,把&lt;、&gt;这类实体转回普通的尖括号:

import html
example_txt = html.unescape(example_txt)

第二步:调整正则规则,增加匹配换行的修饰符,使用非贪婪匹配:

import re
try:
    # re.S 等价于 re.DOTALL,作用是让 . 可以匹配换行符,.*? 是非贪婪匹配,到第一个</BODY>就停止
    body = re.search(r'<BODY>(.*?)</BODY>', example_txt, flags=re.S).group(1).strip()
except:
    body = 'NA'

如果不想做实体解码,可以直接把正则里的标签替换为转义后的格式:

body = re.search(r'&lt;BODY&gt;(.*?)&lt;/BODY&gt;', example_txt, flags=re.S).group(1).strip()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:54:03