使用regexp从Matlab中的字符串数组中过滤出字符串

时间:2013-02-07 13:15:27

标签: regex string matlab

是否存在与strmatch等效的函数,它返回以指定正则表达式开头的所有数组元素的数字索引(而不是字符串?

背景:我有一个名为strarray的字符串数组。我想过滤掉所有没有特定strprefix的字符串。以下代码查找存在特定前缀的字符串数组(strmatch func)的索引,然后从包含前缀的行构建新数组:

indexes = [];
n = strmatch(strprefix, strarray);
indexes = [indexes,n];
indexes = sort(indexes);
newarray = strarray(indexes);

它工作正常,但prefix是一个字符串,我想使用定义的正则表达式。

或者可能有更简单的方法(一个班轮?)来完成这样的任务?


更新

我知道正则表达式函数。我试图从字符串数组中过滤出字符串,但我很难在一两步中完成它。我目前的代码是这样做的(不确定它是否是正确的Matlab编码方式)。

  • 步骤1.清空没有前缀的字符串:regexp(strarray,[prefix,'.*'],'match','once');
  • 步骤2.获取空行的索引emptyCells = cellfun(@isempty,array);
  • 步骤3.删除空行array(emptyCells) = [];

2 个答案:

答案 0 :(得分:1)

函数REGEXP允许您使用正则表达式匹配字符串。

如果您需要构建或应用正则表达式的帮助,可能需要发布其他详细信息。

答案 1 :(得分:1)

你自己真正解决了问题,但这就是你如何在一条(长)线上做你所说的一切。注意 - 我假设您的prefix字符串以^开头,因此它正确匹配“字符串的开头”(如果确实这就是您想要的)。其他问题 - 除非strarray中的所有字符串长度相同,否则你应该使用单元格数组。在这种情况下,您的步骤3不会删除字符串,它只是将其设置为[]。因此,我建议更改逻辑,以便在输出中“包含所有好字符串”,而不是删除不良字符串。这使它看起来如下:

strippedArray = strarray(~cellfun('isempty',regexp(strarray,[prefix,'.*'],'match','once')));

这对我有用......