从文件字符串提取两位数字遇IndexError问题求助(禁用正则)
问题分析与解决
错误原因
触发IndexError的核心问题是:当遍历到字符串的最后一个字符时(即i = len(string)-1),你尝试访问string[i+1],这个索引超出了字符串的范围(字符串最大索引是len(string)-1)。比如你提到的字符串REDOHGMDPOXKFMHUDDOMLDYFAFYDLMODDUHMFKXOPDMGHODER5,末尾只有单个数字5,当i走到这个位置时,i+1就会越界。
修正后的代码
# 用with语句自动管理文件,避免手动关闭遗漏 with open("file.txt") as f: strings = f.read().split() all_two_digits = [] for s in strings: current_list = [] i = 0 print(s) while i < len(s): # 先确保i+1不越界,再判断两个字符是否都是数字 if i < len(s) - 1 and s[i].isdigit() and s[i+1].isdigit(): current_list.append(s[i] + s[i+1]) # 找到两位数字后,直接跳过下一个索引 i += 2 else: i += 1 all_two_digits.extend(current_list)
关键改动说明
- 越界防护:在判断两位数字前,先增加
i < len(s) - 1的条件,确保i+1是有效的索引。 - 简化遍历逻辑:不再通过切片修改原字符串并重置索引,而是直接通过
i += 2跳过已处理的第二个数字,避免因修改字符串导致的遍历混乱。 - 优化文件操作:使用
with语句打开文件,会在代码块结束后自动关闭文件,比手动调用close()更安全可靠。 - 统一结果收集:新增
all_two_digits列表,将每个字符串提取到的两位数字统一收集,方便后续使用。
内容的提问来源于stack exchange,提问作者archerwell32
相关产品推荐
相关产品推荐

