使用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博客

相关推荐
hummhumm23 分钟前
第27章 汇编语言--- 设备驱动开发基础
开发语言·汇编·后端·程序设计·设备驱动·高级语言·低级语言
佐咖31 分钟前
C++STL中常用的排序算法:sort、random_shuffle、merge和reverse(附C++代码)
开发语言·c++·排序算法
多多*1 小时前
后端技术选型 sa-token校验学习 下 结合项目学习 后端鉴权
java·开发语言·前端·学习·算法·bootstrap·intellij-idea
HHppGo1 小时前
java_单例设计模式
java·开发语言·设计模式
喵手1 小时前
Java中合并多个对象的List数据详解
java·开发语言·list
第二层皮-合肥1 小时前
matlab专栏-模拟滤波器设计
matlab
qq_441996051 小时前
Iterator 与 ListIterator 的区别
开发语言·windows·python
计算机小混子2 小时前
C++实现设计模式---单例模式 (Singleton)
开发语言·c++·单例模式
Dyan_csdn2 小时前
【Python项目】基于自适应SVM电影评价倾向性分析系统
开发语言·python
Linux520小飞鱼2 小时前
Go语言的语法糖
开发语言·后端·golang