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

如何提取文本文件中>开头行之间的内容及末尾内容?

问题描述

给定如下文本文件内容:

>rice1 1ALBRGHAER
NNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNN
>peanuts2 2LAEKaq
SSSSSSSSSSS
>OIL3 3hkasUGSV
ppppppppppppppppppppp
ppppppppppppppppppppp

需要提取所有位于含>的行之间,以及最后一段无结尾>行的内容,预期结果为:

result = ['NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN','SSSSSSSSSSS','pppppppppppppppppppppppppppppppppppppppppp']

我自己写的代码无法实现需求,运行后仅返回空字符串,代码如下:

def findtext(inputtextfile, start, end):
    try:
       pattern=rf'{start}(.*?){end}'
       return re.findall(pattern, inputtextfile)
    except ValueError:
       return -1
result = findtext(inputtextfile,"\n", ">")
解决方案

你的代码思路不对,因为你用换行符和>作为匹配边界,但原文本里>在行首,而且你要抓的是两个>行之间的所有非>开头的内容,还要包含最后一段没结尾>的部分。

下面给两种可行的实现方法:

方法一:逐行遍历分组

直接按行拆分文本,遇到>开头的行就收尾上一组内容,开始新的分组;否则把当前行内容加到当前分组里:

def extract_content(text):
    lines = text.strip().split('\n')
    result = []
    current_group = []
    for line in lines:
        if line.startswith('>'):
            # 上一组有内容就先存起来
            if current_group:
                result.append(''.join(current_group))
                current_group = []
        else:
            current_group.append(line.strip())
    # 处理最后一组没被收尾的内容
    if current_group:
        result.append(''.join(current_group))
    return result

# 测试用例
input_text = """
>rice1 1ALBRGHAER
NNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNN
>peanuts2 2LAEKaq
SSSSSSSSSSS
>OIL3 3hkasUGSV
ppppppppppppppppppppp
ppppppppppppppppppppp
"""
result = extract_content(input_text)
print(result)

方法二:正则表达式匹配

用正则匹配所有被>行分隔的非>开头内容块,再处理掉换行符:

import re

def extract_content(text):
    # 正则规则:匹配在>行之后、下一个>行或文本结尾之前的所有非>内容
    pattern = r'(?<=^>.*\n)([^>]+)(?=\n>|\Z)'
    # 开启多行模式和DOTALL模式,让.能匹配换行符
    matches = re.findall(pattern, text, re.MULTILINE | re.DOTALL)
    # 把每个匹配块里的换行符去掉,合并成纯字符串
    return [''.join(match.split()) for match in matches]

# 测试用例
input_text = """
>rice1 1ALBRGHAER
NNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNN
>peanuts2 2LAEKaq
SSSSSSSSSSS
>OIL3 3hkasUGSV
ppppppppppppppppppppp
ppppppppppppppppppppp
"""
result = extract_content(input_text)
print(result)

你的代码问题在哪?

你写的正则rf'\n(.*?)>'是找换行符和>之间的内容,但原文本里换行后直接就是>行,中间没有内容,所以返回空。而且这个正则根本覆盖不到最后一段没有结尾>的内容,自然满足不了需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:10:25