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

如何用Python正则表达式提取文本文件最后两行的编号?

使用Python正则表达式提取文本最后两行的编号

没问题,我来帮你搞定这个需求!要提取txt文件最后两行对应的编号,还要处理编号可能重复的情况,核心思路是先定位到文件的最后两行(或最后两个编号条目),再用正则精准提取每行的编号。下面分两种常见的文件格式给出实现方案:

情况1:文件每行对应一个编号+内容条目

如果你的txt文件是每行存储一个编号和对应的内容(比如:

0001 fd
0002 gfgd
0003 hgjhgj
0006 hfhfg
0007 fgdgdfhf vn

),可以用下面的代码:

import re

# 读取目标txt文件,替换成你的文件路径
with open('your_file.txt', 'r', encoding='utf-8') as f:
    # 读取所有行,同时过滤掉空行(可选,根据你的文件实际情况调整)
    lines = [line.strip() for line in f if line.strip()]

# 获取最后两行,若文件行数不足两行则取所有行
last_two_lines = lines[-2:] if len(lines) >= 2 else lines

# 定义正则:匹配每行开头的4位数字编号
pattern = re.compile(r'^(\d{4})')
extracted_numbers = []

for line in last_two_lines:
    match_result = pattern.match(line)
    if match_result:
        extracted_numbers.append(match_result.group(1))

print("提取到的最后两行编号:", extracted_numbers)

情况2:文件所有条目在一行连续存储

如果你的文件内容是像你提供的示例那样,所有编号+内容在一行里用空格分隔(比如0001 fd 0002 gfgd 0003 hgjhgj 0006 hfhfg 0007 fgdgdfhf vn),我们需要先把每个编号条目分割出来,再取最后两个提取编号:

import re

with open('your_file.txt', 'r', encoding='utf-8') as f:
    content = f.read().strip()

# 用正则分割出每个编号+内容的条目:匹配以4位数字开头,直到下一个4位数字或文本结尾
entries = re.findall(r'(\d{4}\s.*?)(?=\s\d{4}|$)', content)

# 取最后两个条目,若条目数不足2则取所有
last_two_entries = entries[-2:] if len(entries) >= 2 else entries

# 提取每个条目的编号
pattern = re.compile(r'^(\d{4})')
extracted_numbers = [pattern.match(entry).group(1) for entry in last_two_entries if pattern.match(entry)]

print("提取到的最后两个条目编号:", extracted_numbers)

关键正则说明

  • ^(\d{4}):匹配每行(或每个条目)开头的4位数字,括号用于捕获我们需要的编号内容。
  • (\d{4}\s.*?)(?=\s\d{4}|$):这是一个正向预查正则,用来精准分割连续存储的条目,确保每个条目从4位数字开始,到下一个4位数字前或文本结尾结束。

如果你的编号格式不是4位数字,或者分隔符不是空格,只需要调整正则里的匹配规则就行,比如把\d{4}改成\d{3}匹配3位编号,把\s改成你实际的分隔符。

内容的提问来源于stack exchange,提问作者Claire Louise Sajol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:21:42