我需要使用正則運算式來過濾 nii 檔案的目錄并創建一個符合要求的檔案元胞陣列。但是,我是 matlab 新手,我需要太多的要求來計算所需的正則運算式。
所需的單元格陣列顯示在附加的影像中(但請注意,nii 檔案有 20 幀,所以我希望腳本回圈 20 次):

以下是目錄中的檔案(以及我不感興趣的其他檔案):
目錄中的檔案:

過去,我已經能夠通過僅使用 dir 并使用 '*.nii 過濾來創建這些陣列,但是,我正在使用的目錄有很多不同的 nii、檔案,所以在這里使用它不夠具體。
從圖片中可以看出,我正在尋找的模式是 'ica_sub' 3 位 ' component_ica_s' 1 位 ' .nii,' 最后一位。
如上所述,nii 檔案有 20 幀,因此運算式中的“最終數字”需要是一個包含數字 1 到 20 的變數(我將回圈遍歷)。
我真的很困惑如何將所有這些結合在一起。如果有人可以幫助我,我將不勝感激。杰拉德
我試圖在 matlab 上查找正則運算式的示例,但我很難理解語法
uj5u.com熱心網友回復:
您可以.nii使用以下方法之一獲取目錄中的所有檔案:
files = dir( fullfile( 'myDirectory', '*.nii' ) ); % single directory
files = dir( fullfile( 'myDirectory', '**\*.nii' ) ); % recursive nested directories
我喜歡將此結構轉換為表格以便于操作
files = struct2table( files, 'AsArray', true );
然后你可以使用正則運算式來過濾這個模式:
'ica__sub' 3 位數字 'component_ica_s' 1 位數字 '.nii'
我冒昧地添加了第二個下劃線,ica__sub因為這就是您的螢屏截圖顯示的內容。
正則運算式過濾用于\d{n}匹配n數字,并帶有前綴^以斷言名稱以開頭而ica_...不是僅包含此字串。
% Get the matches, will be empty for each unmatched name
matchedParts = regexp( files.name, '^ica__sub\d{3}component_ica_s\d{1}\.nii', 'match', 'once' );
% Get which rows are a match
idx = ~cellfun( @isempty, matchedParts );
% Filter the directory results
files = files( idx, : );
現在你可以遍歷這些檔案并做任何你想做的事情
for ii = 1:height(files)
filename = fullfile( files.folder{ii}, files.name{ii} );
% do something with filename...
% Maybe loop 1 to 20 for frames within each file
for kk = 1:20
file_frame = [filename, ',', num2str(kk)];
% something else...
end
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/522621.html
標籤:正则表达式matlab
