之前进行程序运行时,生成日志文件,内含需提取的数据,但数据与文本信息交织,使用格式化输入如fscanf()等函数难以区分。于是,了解到正则表达式强大文本处理能力,开始学习并利用正则表达式提取文本中的有效数据。本文旨在记录,以备日后参考。日志文件片段如下,目标是分别提取“Particle Info”与“Fluid Info”所在行的数据,存储为CSV格式至“particle_info.csv”与“fluid_info.csv”文件中。提取数字字符串的正则表达式,推荐学习资源如“菜鸟教程”,理解并上手快速。正则表达式在线工具regex101能辅助学习与应用。使用如下正则表达式匹配数字字符串:- 表示匹配负号,-?表示匹配0或1次,考虑到负数情况;\dp表示匹配数字,\d+表示匹配1或无穷次;\.表示匹配字符 .,\.?表示匹配0或1次,考虑有小数或整数情况;\d*表示匹配0或无穷次数字,考虑出现1.省略小数点后0的可能情况。通过在线工具验证正则表达式正确性后,执行代码。Python利用re模组,读取文件,使用re.search()寻找匹配字符串,返回数据。re.findall()匹配所有满足表达式的字符串,转化为list存储。使用命令行参数,输出重定向获取数据。C++使用正则表达式库,定义regex_number()函数筛选数字字符串,CSV格式返回。正则表达式中,\d与\.需要转义。命令行参数增加程序灵活性。输出重定向获取数据。后记,比较Python与C++代码处理速度,Python处理29413行文件需约0.2s,C++需3s。可能C++代码效率问题,期待高手指点。欢迎指出错误,避免在网络传播错误信息。