是否存在与strmatch等效的函数,它返回以指定正则表达式开头的所有数组元素的数字索引(而不是字符串?
背景:我有一个名为strarray
的字符串数组。我想过滤掉所有没有特定strprefix
的字符串。以下代码查找存在特定前缀的字符串数组(strmatch func)的索引,然后从包含前缀的行构建新数组:
indexes = [];
n = strmatch(strprefix, strarray);
indexes = [indexes,n];
indexes = sort(indexes);
newarray = strarray(indexes);
它工作正常,但prefix
是一个字符串,我想使用定义的正则表达式。
或者可能有更简单的方法(一个班轮?)来完成这样的任务?
更新
我知道正则表达式函数。我试图从字符串数组中过滤出字符串,但我很难在一两步中完成它。我目前的代码是这样做的(不确定它是否是正确的Matlab编码方式)。
regexp(strarray,[prefix,'.*'],'match','once');
emptyCells = cellfun(@isempty,array);
array(emptyCells) = [];
答案 0 :(得分:1)
函数REGEXP允许您使用正则表达式匹配字符串。
如果您需要构建或应用正则表达式的帮助,可能需要发布其他详细信息。
答案 1 :(得分:1)
你自己真正解决了问题,但这就是你如何在一条(长)线上做你所说的一切。注意 - 我假设您的prefix
字符串以^
开头,因此它正确匹配“字符串的开头”(如果确实这就是您想要的)。其他问题 - 除非strarray中的所有字符串长度相同,否则你应该使用单元格数组。在这种情况下,您的步骤3不会删除字符串,它只是将其设置为[]
。因此,我建议更改逻辑,以便在输出中“包含所有好字符串”,而不是删除不良字符串。这使它看起来如下:
strippedArray = strarray(~cellfun('isempty',regexp(strarray,[prefix,'.*'],'match','once')));
这对我有用......