从路径名中提取信息
Extract information from path name
我想在 MATLAB 中制作一个脚本,以特定名称保存我的输出数据。此名称的所有信息都在输入数据的路径中,如下所示:
path = 'C:\projektions100\algorithm1\method_A\data1';
projection =
algorithm =
method =
data =
然后脚本应使用关键字 (f.e.method) 从相邻的反斜杠中提取路径中的文本,以便脚本更加灵活,以防我在某些文件夹名称中出现拼写错误。
This is what I found to extract a text between a start and a end point 但我不能简单地使用反斜杠,因为路径中有一些反斜杠。
我该如何进行?
问题在于如何找到关键字的结尾。这是一段代码,它循环遍历关键字并在路径中查找它们(存储在 p2fldr
中,因为变量 path
returns 是 MATLAB 中的工作路径,如果你定义它)。
p2fldr = 'C:\projektions100\algorithm1\method_A\data1';
% keywords
kyWrd = {'projection','algorithm','method','data'};
Tag = cell(size(kyWrd));
for i = 1:length(kyWrd)
% get keyword
ky = kyWrd{i};
% look for it in the path
idx = strfind(p2fldr,ky);
if ~isempty(idx)
% remaining path
idx_offset = idx+strlength(ky);
prm = p2fldr(idx_offset:end);
% look for file separator '\'
idx_tmp = strfind(prm,filesep);
% if you don't find one, it is pabably the last entry, so take the
% length
if isempty(idx_tmp)
idx_tmp = length(prm)+1;
end
% this is the index where it ends
idx2 = idx_tmp(1)-1;
% assign to tag-cell
Tag{i} = prm(1:idx2);
end
end
如果您知道快捷方式始终位于路径的最后 4 个条目中,则可以创建快捷方式,这样您就可以立即使用 strsplit
并为最后返回的单元格建立索引
str_splt = strsplit(p2fldr,filesep);
Tag = cell(size(kyWrd));
for i = 1:length(kyWrd)
% index cells
str = str_splt{end-length(kyWrd)+i};
% get keyword
ky = kyWrd{i};
Tag{i} = str(length(ky)+1:end);
end
请注意,这并不关心它是否与您的关键字匹配(例如,您的路径说 'projektions'
但我将关键字定义为 'projection'
)
您可以简单地使用带有命名标记的 regexp
:
>> path = 'C:\projektions100\algorithm1\method_A\data1';
>> all=regexp(path,'[^\]+\proje[ck]tion(?<projection>[^\]+)\algorithm(?<algorithm>[^\]+)\method(?<method>[^\]+)\data(?<data>.+$)','names')
all =
struct with fields:
projection: 's100'
algorithm: '1'
method: '_A'
data: '1'
我想在 MATLAB 中制作一个脚本,以特定名称保存我的输出数据。此名称的所有信息都在输入数据的路径中,如下所示:
path = 'C:\projektions100\algorithm1\method_A\data1';
projection =
algorithm =
method =
data =
然后脚本应使用关键字 (f.e.method) 从相邻的反斜杠中提取路径中的文本,以便脚本更加灵活,以防我在某些文件夹名称中出现拼写错误。 This is what I found to extract a text between a start and a end point 但我不能简单地使用反斜杠,因为路径中有一些反斜杠。 我该如何进行?
问题在于如何找到关键字的结尾。这是一段代码,它循环遍历关键字并在路径中查找它们(存储在 p2fldr
中,因为变量 path
returns 是 MATLAB 中的工作路径,如果你定义它)。
p2fldr = 'C:\projektions100\algorithm1\method_A\data1';
% keywords
kyWrd = {'projection','algorithm','method','data'};
Tag = cell(size(kyWrd));
for i = 1:length(kyWrd)
% get keyword
ky = kyWrd{i};
% look for it in the path
idx = strfind(p2fldr,ky);
if ~isempty(idx)
% remaining path
idx_offset = idx+strlength(ky);
prm = p2fldr(idx_offset:end);
% look for file separator '\'
idx_tmp = strfind(prm,filesep);
% if you don't find one, it is pabably the last entry, so take the
% length
if isempty(idx_tmp)
idx_tmp = length(prm)+1;
end
% this is the index where it ends
idx2 = idx_tmp(1)-1;
% assign to tag-cell
Tag{i} = prm(1:idx2);
end
end
如果您知道快捷方式始终位于路径的最后 4 个条目中,则可以创建快捷方式,这样您就可以立即使用 strsplit
并为最后返回的单元格建立索引
str_splt = strsplit(p2fldr,filesep);
Tag = cell(size(kyWrd));
for i = 1:length(kyWrd)
% index cells
str = str_splt{end-length(kyWrd)+i};
% get keyword
ky = kyWrd{i};
Tag{i} = str(length(ky)+1:end);
end
请注意,这并不关心它是否与您的关键字匹配(例如,您的路径说 'projektions'
但我将关键字定义为 'projection'
)
您可以简单地使用带有命名标记的 regexp
:
>> path = 'C:\projektions100\algorithm1\method_A\data1';
>> all=regexp(path,'[^\]+\proje[ck]tion(?<projection>[^\]+)\algorithm(?<algorithm>[^\]+)\method(?<method>[^\]+)\data(?<data>.+$)','names')
all =
struct with fields:
projection: 's100'
algorithm: '1'
method: '_A'
data: '1'