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

如何构建Regex函数提取含数字及数字加T/F的目标行?

问题描述

我有一个文本文件,内容如下:

Some text and random stuff that I don't need

2 8 
2 9 T
4 9
1 10 
2 10 F
7 11 T

More random stuff

需要提取仅包含数字的行,以及包含数字和T或F的行。我写的代码雏形如下:

with open(file, 'r') as log_file:
    # opening file
        file = log_file
        while True:
            line = file.readlines()
            
            # if line in regex function:

                data.append(line)
                # closing file
                break

请问该如何实现这一需求?

实现方案

1. 确定匹配用的正则表达式

我们需要匹配两种行:

  • 仅包含数字和空格的行(比如2 8、4 9)
  • 包含数字、空格,结尾是T或F的行(比如2 9 T、2 10 F)

可以用这个正则表达式:

^\d+(?:\s+\d+)*(?:\s+[TF])?$

解释一下各部分:

  • ^:匹配行的开头
  • \d+:匹配至少一个数字
  • (?:\s+\d+)*:匹配零个或多个「空格+数字」的组合(?:表示非捕获组,不额外保存分组结果)
  • (?:\s+[TF])?:可选的「空格+T/F」部分,?表示这部分可以没有
  • $:匹配行的结尾

2. 修正并完善代码

你的代码存在几个问题:readlines()会一次性读取所有行,不需要用while True循环;缩进错误;file = log_file完全多余。下面是完整的实现代码:

import re

data = []
# 替换成你的文件路径
file_path = "your_file.txt"

with open(file_path, 'r') as log_file:
    for line in log_file:
        # 去掉行首尾的空白字符(包括换行、空格)
        stripped_line = line.strip()
        # 跳过空行
        if not stripped_line:
            continue
        # 用正则匹配整行内容
        if re.fullmatch(r'^\d+(?:\s+\d+)*(?:\s+[TF])?$', stripped_line):
            data.append(stripped_line)

# 输出结果看看
print(data)

代码关键点说明

  • 使用re.fullmatch():确保整个行的内容完全符合正则规则,不会匹配到部分符合的情况
  • 先处理空行:用strip()后判断是否为空,避免无效的空行被误处理
  • 遍历文件行:直接用for line in log_file逐行读取,比一次性读所有行更节省内存,尤其是大文件

运行这段代码后,data列表里就会存储所有符合要求的行:['2 8', '2 9 T', '4 9', '1 10', '2 10 F', '7 11 T']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:57:29