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

