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

使用Regex获取文件中每个数值的首次出现方法咨询

解决数值首次出现去重的问题

嗨,我来帮你实现只输出每个数值首次出现的需求!你的当前代码只是匹配并打印符合格式的行,但没处理重复值,我们只需要加一个去重追踪的逻辑就能搞定。

核心思路

用一个集合(set)来记录已经输出过的数值——集合的特性是元素唯一且查询速度快,完美适合用来判断某个数值是否已经出现过。

具体代码实现

方案1:逐行处理文件(支持多行内容)

假设你的文件可能有多行,每行包含若干目标数值,我们可以这样写:

import re

# 初始化空集合,用来存已经见过的数值
seen = set()
# 简化正则表达式,匹配162.xxxx格式的四位小数数值
pattern = re.compile(r'162\.\d{4}')

# 打开文件逐行处理
with open('你的文件名.txt', 'r') as file:
    for line in file:
        # 找到当前行所有匹配的数值
        matched_nums = pattern.findall(line)
        for num in matched_nums:
            # 如果这个数值没出现过,就打印并加入集合
            if num not in seen:
                print(num, end=' ')
                seen.add(num)

方案2:单行内容快速处理

如果你的文件内容就是一整行的数值(像你给出的例子那样),也可以直接分割后处理,甚至不用正则(如果数值格式固定的话):

with open('你的文件名.txt', 'r') as file:
    # 读取整行内容并分割成数值列表
    all_nums = file.read().strip().split()
    seen = set()
    unique_nums = []
    for num in all_nums:
        if num not in seen:
            unique_nums.append(num)
            seen.add(num)
    # 按空格拼接输出
    print(' '.join(unique_nums))

正则表达式优化说明

你原来的正则(1[6][2]\.[0-9][0]+)可以简化为162\.\d{4}:

  • 162\.直接匹配固定前缀162.(注意.在正则里要转义)
  • \d{4}匹配4位数字,正好对应你示例里的四位小数部分,比[0-9][0]+更准确(后者会匹配1个数字加至少1个0,比如162.000也会匹配,但你的需求是四位小数,所以\d{4}更合适)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:26:03