小能豆

Matlab 中与 `endsWith` 等效的内容:如何根据扩展名过滤文件名列表?

py

在 Python、Java 等语言中是否有与该函数等效的 MATLAB 版本endswith

我想根据字符串的结尾来过滤字符串列表,例如以下列表:

a.tif
b.jpg
c.doc
d.txt
e.tif

应通过 endswith(‘.tif’) 进行过滤,结果如下:

a.tif
e.tif

以下是我在 Python 中执行的操作:

textList = ['a.tif','b.jpg','c.doc','d.txt','e.tif'];
filteredList = filter(lambda x:x.endswith('.tif'), textList)

这是我在 MATLAB 中尝试过的:

textList = {'a.tif'; 'b.jpg'; 'c.doc'; 'd.txt'; 'e.tif'};
found = strfind(textList, '.tif');
a = zeros(size(found)); for k = 1:size(found), a(k)=~isempty(found{k}); end;
textList(logical(a))

我可能必须用替换strfindregexp查找字符串末尾的出现。总的来说,我认为这是一种相当复杂的实现目标的方法。有没有更简单的方法来过滤 MATLAB 中的列表?


阅读 29

收藏
2024-12-03

共1个答案

小能豆

可能相当有效的是使用正则表达式:

filelist = {'a.tif'
            'c.doc'
            'd.txt'
            'e.tif'}

filtered = regexp( filelist ,'(\w*.txt$)|(\w*.doc$)','match')
filtered = [filtered{:}]

解释:

(\w*.txt$)将返回所有\w*以 结尾的$文件名.txt,并将(\w*.doc$)返回所有\w*以 结尾的$文件名.doc|只是逻辑运算符。

特别是当您只想过滤一个文件扩展名时,它非常方便:

fileExt = 'tif';
filtered = regexp( filelist ,['\w*.' fileExt '$'],'match')
filtered = [filtered{:}]

过滤多个文件扩展名也是可能的,但您需要创建更长的正则表达式

fileExt = {'doc','txt'};
dupe = @(x) repmat({x},1,numel(fileExt))
filter = [dupe('(\w*.'); fileExt(:).'; dupe('$)'); dupe('|')] %'

filtered = regexp( filelist, [filter{1:end-1}], 'match')
filtered = [filtered{:}]
2024-12-03