1

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

背景:我有一个名为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');
  • Step 2. 获取空行索引emptyCells = cellfun(@isempty,array);
  • 步骤 3. 删除空行array(emptyCells) = [];
4

2 回答 2

2

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

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

这对我有用...

于 2013-02-07T15:15:48.610 回答
1

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

如果您在构建或应用正则表达式时需要帮助,您可能需要发布更多详细信息。

于 2013-02-07T13:19:29.027 回答