
本文介绍如何用python逐行读取文本文件,利用正则表达式同时提取所有数字(存入列表)和移除所有数字后保留的纯文本(存入另一列表),代码简洁、健壮且符合python最佳实践。
本文介绍如何用python逐行读取文本文件,利用正则表达式同时提取所有数字(存入列表)和移除所有数字后保留的纯文本(存入另一列表),代码简洁、健壮且符合python最佳实践。
在实际文本处理任务中,常需将数字与非数字内容分离——例如解析日志、清洗用户输入或预处理结构化数据。Python 提供了高效且直观的解决方案:结合 with open() 安全读取文件 + re.findall() 提取数字 + re.sub() 移除数字。
以下是一个完整、可直接运行的示例:
import re
numbers_list = [] # 存储每行中提取出的所有数字(字符串形式)
clean_lines = [] # 存储移除数字后的各行文本
with open('file.txt', 'r', encoding='utf-8') as file:
for line in file:
line = line.rstrip('\n') # 去除换行符,避免影响输出格式
# 提取连续数字(支持多位数,如 "123" → ["123"];"a1b22c333" → ["1", "22", "333"])
numbers = re.findall(r'\d+', line)
# 移除所有数字(含多位数),保留其余字符及空格
cleaned = re.sub(r'\d+', '', line)
numbers_list.append(numbers)
clean_lines.append(cleaned)
# 示例输出结果
for i, (nums, clean) in enumerate(zip(numbers_list, clean_lines), 1):
print(f"第{i}行 → 数字: {nums}, 清洗后: '{clean}'")✅ 关键说明:
仅使用 Python 将 Claw Code 虚拟化框架与 OpenClaw 集成,提供 184 种工具和 200 多条命令,用于安全分析和代码质量...
- r'\d+' 匹配一个或多个连续数字,比 \d(单个数字)更符合实际需求(如正确识别 "2024" 而非拆成 ['2','0','2','4']);
- 使用 with open() 确保文件自动关闭,避免资源泄漏;
- line.rstrip('\n') 预先清理换行符,使 cleaned 字符串更干净(否则 'abc123\n' → 'abc\n');
- numbers 是字符串列表(如 ['42', '7']),如需数值计算,可用 [int(x) for x in numbers] 转换。
⚠️ 注意事项:
立即学习“Python免费学习笔记(深入)”;
- 若文件含中文、特殊符号或编码异常(如 GBK),请显式指定 encoding 参数(如 encoding='gb18030');
- re.findall 返回空列表 [](而非 None)当无匹配时,可安全 append;
- 若需“仅保留字母+空格”,可将 re.sub(r'\d+', '', line) 替换为 re.sub(r'[^a-zA-Z\s]', '', line),但本例聚焦数字处理。
该方案逻辑清晰、扩展性强——后续可轻松接入 Pandas、写入新文件或添加过滤条件(如只提取大于100的数字),是文本清洗任务中的标准实践。

















