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

相关推荐
不想看见40419 小时前
C++/Qt 实习岗位深度解析【结合一次研发实习谈感受】
开发语言·c++·qt
sjmaysee19 小时前
Java框架SpringBoot(一)
java·开发语言·spring boot
寒秋花开曾相惜19 小时前
(学习笔记)3.8 指针运算(3.8.3 嵌套的数组& 3.8.4 定长数组)
java·开发语言·笔记·学习·算法
想唱rap19 小时前
Linux线程
java·linux·运维·服务器·开发语言·mysql
Tony Bai19 小时前
Rust 看了流泪,AI 看了沉默:扒开 Go 泛型最让你抓狂的“残疾”类型推断
开发语言·人工智能·后端·golang·rust
njidf19 小时前
C++与Qt图形开发
开发语言·c++·算法
qwehjk200820 小时前
代码动态生成技术
开发语言·c++·算法
是翔仔呐20 小时前
第11章 显示外设驱动:I2C协议OLED屏、SPI协议LCD屏字符/图片/中文显示
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee
jason成都20 小时前
IoT 设备监控系统实战:基于 EMQX 的 MQTT 连接监控与数据格式指纹识别
开发语言·python
铭毅天下20 小时前
EasySearch Rules 规则语法速查手册
开发语言·前端·javascript·ecmascript