如何使用Java Scanner正确拆分含随机空格的文本文件?
处理含随机空格的文本文件读取方案
针对你提供的文本(字段间多空格分隔,日期内部存在随机空格),可以用以下三种方法正确读取:
方法一:Python正则捕获 + 日期清理
适合需要后续编程处理的场景,利用正则直接捕获每行三个字段,再清理日期内的空格:
import re # 匹配每行结构:非空格字段1 → 含空格的日期 → 非空格字段3 line_pattern = re.compile(r'^(\S+)\s+([\d\s\-/.]+)\s+(\S+)$') with open('target_file.txt', 'r') as file: for raw_line in file: line = raw_line.strip() if not line: continue match_result = line_pattern.match(line) if match_result: field1 = match_result.group(1) raw_date = match_result.group(2) field3 = match_result.group(3) # 移除日期内部的所有空格 clean_date = raw_date.replace(' ', '') print(f"{field1}\t{clean_date}\t{field3}") else: print(f"无法解析行:{line}")
方法二:命令行工具组合(sed + awk)
适合快速批量处理,无需编写完整脚本:
先通过sed清理日期内部的空格,再用awk按空格分割字段:
sed -E 's/([0-9])[[:space:]]+([-/.])/\1\2/g; s/([-/.])[[:space:]]+([0-9])/\1\2/g' your_file.txt | awk '{print $1, $2, $3}'
该命令会先移除日期中数字与分隔符(-/.)之间的空格,再输出每行三个干净的字段。
方法三:awk直接拼接日期片段
无需额外工具,直接用awk识别被空格拆分的日期片段并拼接:
awk '{ date_str = "" # 第一个字段是$1,最后一个是$NF,中间片段拼接为无空格日期 for (i=2; i<NF; i++) { date_str = date_str $i } printf "%s\t%s\t%s\n", $1, date_str, $NF }' your_file.txt
内容的提问来源于stack exchange,提问作者Prome88
相关产品推荐
相关产品推荐

