如何在C#中解析含非通用分隔符的.txt文件
嘿,看你现在需要解析这种类Lisp格式的学生信息文本文件,之前只能逐行打印,那咱们来把解析逻辑补上!我用Python给你举个实用的实现例子,思路清晰还容易扩展:
解析类Lisp格式学生信息文件的实现方案
第一步:先理清每行的结构
咱们先拆解下每行的格式:
(LIST (LIST '姓 '名 '中间名) '身份证号/ 'NONE '邮箱 GPA)
核心是把这些嵌套的列表、单引号、括号这些冗余符号清理掉,然后提取出咱们需要的四个核心字段:姓名组合、身份证号、邮箱、GPA。
第二步:编写解析函数
我写了个parse_student_line函数,专门处理单一行的解析,逻辑很直观:
def parse_student_line(line): # 先清理掉首尾的(LIST 和 ),再去掉所有单引号,最后清理多余空格 cleaned = line.strip().replace('(LIST ', '').replace(')', '').replace("'", "").strip() # 按空格拆分,过滤掉空字符串 segments = [seg for seg in cleaned.split() if seg] # 提取姓名部分:前三个元素是姓、名、中间名首字母 last, first, middle = segments[0], segments[1], segments[2] full_name = f"{first} {middle}. {last}" # 处理身份证号:如果是NONE就转成友好提示 id_num = segments[3] if segments[3] != "NONE" else "无身份证号记录" # 提取邮箱和GPA(GPA转成float方便后续计算) email = segments[4] gpa = float(segments[5]) # 返回结构化的字典,方便后续使用 return { "full_name": full_name, "id_number": id_num, "email": email, "gpa": gpa }
第三步:读取文件并批量解析
接下来就是读取文本文件,逐行调用上面的函数,处理完可以打印或者存到数据库里:
# 替换成你的txt文件路径 with open("student_records.txt", "r") as f: for line in f: # 跳过空行 if not line.strip(): continue student_info = parse_student_line(line) # 格式化打印,也可以改成写入CSV/数据库 print(f"【{student_info['full_name']}】") print(f" 身份证号:{student_info['id_number']}") print(f" 邮箱:{student_info['email']}") print(f" GPA:{student_info['gpa']:.2f}\n")
测试效果
用你给出的示例文本运行,输出会是这样的:
【Jane F. Doe】 身份证号:8888675309 邮箱:jfdoe@mail.university.edu GPA:2.31 【John F. Doe】 身份证号:无身份证号记录 邮箱:johnfdoe@mail.university.edu GPA:3.19 【Jim F. Doe】 身份证号:8885551234 邮箱:jimdoe@mail.university.edu GPA:3.45
额外提示
如果你的文本里还有其他特殊情况(比如中间名缺失、GPA是整数),可以在解析函数里加一些判断逻辑,比如用try-except包裹GPA的转换,避免报错。
内容的提问来源于stack exchange,提问作者Charles Roberts
相关产品推荐
相关产品推荐

