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

如何用Python从有效的<document>标签对中提取文本?

如何用Python从有效的标签对中提取文本?

嘿,我明白你的问题了——你的文本里有好几个<document>起始标签,但只有一个闭合的</document>,现在用正则提取的时候,会把从第一个<document>开始到闭合标签的所有内容都抓出来,这显然不是你想要的有效配对内容对吧?

给你两个简单的解决办法,都能精准拿到最后一个<document>和</document>之间的文本:

方法一:调整正则表达式(精准匹配最后一对标签)

我们可以用负向前瞻来确保匹配的是最后一个<document>标签,这样就不会把前面未闭合的标签内容也带进来:

import re

with open('data.txt', 'r') as f:
    text = f.read()

# 匹配最后一个<document>到</document>之间的内容
match_result = re.search(r"<document>(?!.*<document>)(.*?)</document>", text, re.DOTALL)
if match_result:
    # 提取内容并去除首尾空白
    extracted_text = match_result.group(1).strip()
    print(extracted_text)

这里的(?!.*<document>)是关键,它会检查当前<document>之后再也没有其他<document>标签了,这样就精准定位到了那个有闭合标签的有效起始标签。

方法二:用字符串分割(更直观易读)

如果觉得正则有点绕,用字符串分割的方法更简单,毕竟你也说了不会有嵌套标签:

with open('data.txt', 'r') as f:
    text = f.read()

# 按<document>分割文本,取最后一段(也就是最后一个<document>后面的内容)
after_last_document = text.split("<document>")[-1]
# 再按</document>分割,取前面的部分就是我们要的内容
extracted_text = after_last_document.split("</document>")[0].strip()
print(extracted_text)

这个思路很直接:先把文本切成以<document>为分隔的片段,最后一段肯定是从最后一个<document>开始的内容,再把这段里</document>之前的部分拿出来就好。

为啥你之前的正则会失效呢?因为你用的.*?是非贪婪匹配,但它还是会从第一个<document>开始匹配,直到找到第一个</document>,所以会把中间额外的<document>和内容都包含进去。上面两种方法都能完美解决这个问题,选你觉得顺手的就行~

备注:内容来源于stack exchange,提问作者nohardfeelings

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 14:28:00