如何用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
相关产品推荐
相关产品推荐

