
本文介绍使用python正则表达式高效处理文本文件:逐行读取,自动提取所有连续数字(如"123"、"45")存入数字列表,并生成剔除所有数字后的纯净字符串,适用于日志清洗、数据预处理等场景。
本文介绍使用python正则表达式高效处理文本文件:逐行读取,自动提取所有连续数字(如"123"、"45")存入数字列表,并生成剔除所有数字后的纯净字符串,适用于日志清洗、数据预处理等场景。
在实际数据处理中,常需将混杂数字的文本行“一分为二”:一部分保留所有数字用于数值分析,另一部分去除数字后用于文本特征提取。Python 的 re 模块配合上下文管理的文件操作,可简洁、健壮地实现这一目标。
以下为完整可运行示例:
import re
# 初始化两个空列表用于累积结果
all_numbers = [] # 存储每行提取出的所有数字(字符串形式)
clean_lines = [] # 存储每行移除数字后的纯净字符串
with open('file.txt', 'r', encoding='utf-8') as file:
for line in file:
line = line.rstrip('\n') # 去除换行符,避免影响输出格式
# 提取所有连续数字(支持多位数,如 "abc123def45" → ['123', '45'])
numbers = re.findall(r'\d+', line)
# 移除所有数字(包括数字间的空格保持原样,仅删数字字符)
cleaned = re.sub(r'\d+', '', line)
# 累积到全局列表
all_numbers.extend(numbers) # 或 .append(numbers) 若需保留每行分组
clean_lines.append(cleaned)
# 查看结果
print("所有提取的数字:", all_numbers)
print("对应净化后的行:", clean_lines)
✅ 关键说明与注意事项:
- re.findall(r'\d+', line) 匹配一个或多个连续数字,返回字符串列表(如 'Price: $299 and 50% off' → ['299', '50']);若需单个数字字符(如 '1','2','9','9'),改用 r'\d'。
- re.sub(r'\d+', '', line) 安全替换所有数字子串为空,不会误删字母或符号,且保留原始空格与标点。
- 使用 with open(...) 确保文件自动关闭,避免资源泄漏;显式指定 encoding='utf-8' 防止中文等字符乱码。
- 若需按行结构化存储(即每个元素为 [数字列表, 纯净字符串]),可改用 result.append((numbers, cleaned))。
该方案简洁、可扩展性强,无需手动循环字符或状态判断,是处理此类文本清洗任务的标准实践。










