从路径名中提取信息

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'