使用MATLAB正则表达式从文本文件中提取数据

使用MATLAB正则表达式从文本文件中提取数据

使用Python正则表达式从文本文件中提取数据的代码请看这篇文章使用正则表达式读取文本数据【Python】-CSDN博客

文本数据格式

需要提取 V = 后面的数据, 并绘制出曲线.

txt 复制代码
index = 1

 V = 0.000000

 W = 0.000000

 E_theta = 0.000000

 UINV = 0.000000

 fault_flag= 0

 index = 2

 V = -0.025882

 W = 0.044830

 E_theta = -0.523599

 UINV = 0.000000

 fault_flag= 0

 index = 3

 V = 0.220001

 W = -0.201728

 E_theta = 2.312893

 UINV = 0.000000

 fault_flag= 0

 index = 4

 V = 0.245881

 W = 0.067243

 E_theta = 1.303847

 UINV = 0.000000

 fault_flag= 0

MATLAB代码

matlab 复制代码
% 读取数据

file_text = fileread('data.txt');           % 从文件中读取
% clipboard_text = clipboard('paste');        % 从剪贴板中读取
% data = clipboard_text;
data = file_text;

% 使用正则表达式提取数据

% (\d+\.\d+)                                % 这是一个捕获组, 表示我们要提取的内容
% \d+                                       % 表示匹配一个数或多个数
% \.                                        % 表示匹配小数点
% (?<!)                                     % 负向后瞻断言, 确保匹配位置的前面不匹配某个特定格式 
                                            % 指定在主表达式之前不能匹配的分组(如果匹配, 结果将被丢弃)
                                            % 确保匹配位置的前面不匹配
% \S                                        % 匹配任何非空白字符, 包括字母、数字、标点符号等; 不包括空格、制表符、换行符等.
% ?<!                                       % 
% MALTAB中的\b 表示退格 不支持单词匹配
pattern = '(?<!\S)V\s*=\s*([-\d]+\.\d+)';   % 匹配 V = 后面的浮点数
matches = regexp(data, pattern, 'tokens');


% 数据转换

% @(x) str2double(x{1})                     % 是一个匿名函数, 将每个元胞中的字符串转换为双精度浮点数
% x{1}                                      % 每个元胞中只有一个元素
% cellfun                                   % 对元胞数组中的每个元素应用函数
V_values = cellfun(@(x) str2double(x{1}), matches);     % 将字符串转换为双精度浮点数

% 元胞数组: 是一种包含名为元胞的索引数据容器的数据类型, 其中的每个元胞都可以包含任意类型的数据


% 绘制图像

% 绘制折线图
figure;                                                 % 创建一个新的空白图形窗口(不会覆盖当前活动图形窗口)
% -o            % 表示绘制实线, 在每个数据点上绘制圆形标记
% LineWidth     % 线宽设置为2, 默认线宽为0.5
% MarkerSize    % 设置标记大小为8, 默认为6
plot(V_values, '-o', 'LineWidth', 2, 'MarkerSize', 8,...
    'DisplayName', 'V Values');                         % 带圆点的折线图
xlabel('Index');                                        % 设置横轴标签
ylabel('V Values');                                     % 设置纵轴标签
title('V Values Over Index');                           % 设置图形标题
grid on;                                                % 显示网格线


legend('show');                                         % 添加图例
legend('Location', 'northwest');                        % 将图例放在左上角

运行结果

关键点

MATLAB正则表达式中, 需要区别VUINV, 可以使用负向后瞻断言处理

可使用AI工具快速生成正则表达式.

参考链接

RegExr: Learn, Build, & Test RegEx
Matlab利用正则表达式对数据进行提取处理_matlab用正则表达式读取范围文本中的指定内容-CSDN博客
第6章 6.3.1 正则表达式的语法(MATLAB入门课程)_matlab 正则表达式-CSDN博客

相关推荐
BanLul7 分钟前
进程与线程 (三)——线程间通信
c语言·开发语言·算法
十八朵郁金香12 分钟前
【JavaScript】深入理解模块化
开发语言·javascript·ecmascript
Hello.Reader20 分钟前
深入理解 Rust 的 `Rc<T>`:实现多所有权的智能指针
开发语言·后端·rust
程序员阿鹏23 分钟前
jdbc批量插入数据到MySQL
java·开发语言·数据库·mysql·intellij-idea
yoona102024 分钟前
Rust编程语言入门教程(八)所有权 Stack vs Heap
开发语言·后端·rust·区块链·学习方法
莲动渔舟25 分钟前
国产编辑器EverEdit - 在编辑器中对文本进行排序
java·开发语言·编辑器
滴_咕噜咕噜1 小时前
C#基础总结:常用的数据结构
开发语言·数据结构·c#
martian6651 小时前
【Java高级篇】——第16篇:高性能Java应用优化与调优
java·开发语言·jvm
许苑向上2 小时前
Java八股文(下)
java·开发语言
菜鸟一枚在这2 小时前
深入解析设计模式之单例模式
开发语言·javascript·单例模式