使用MATLAB正则表达式从文本文件中提取数据
使用Python正则表达式从文本文件中提取数据的代码请看这篇文章使用正则表达式读取文本数据【Python】-CSDN博客
文本数据格式
需要提取 V =
后面的数据, 并绘制出曲线.
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代码
% 读取数据
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
正则表达式中, 需要区别V
与UINV
, 可以使用负向后瞻断言处理
可使用AI工具快速生成正则表达式.
参考链接
RegExr: Learn, Build, & Test RegEx
Matlab利用正则表达式对数据进行提取处理_matlab用正则表达式读取范围文本中的指定内容-CSDN博客
第6章 6.3.1 正则表达式的语法(MATLAB入门课程)_matlab 正则表达式-CSDN博客