Matlab:如何从字符串中删除前缀

Matlab: How to delete prefix from strings

问题:从 TrajCompact 中,我使用正则表达式找到所有前缀和前缀后的值,代码如下:

[digits{1:2}] = ndgrid(0:4);
  for k=1:25
  matches(:,k)=regexp(TrajCompact(:,1),sprintf('%d%d.*',digits{1}(k),digits{2}(k)),'match','once');
  end

我只想要匹配的后缀,如何从匹配中删除前缀?

使用正则表达式的方法

您可以将 .* 部分放在一个组中,方法是将其括在括号中(即 (.*))。 Matlab 对此有一些特殊的 'token' 命名法。无论如何,一个它如何工作的例子:

[match, group] = regexp('25blah',sprintf('%d%d(.*)',2,5),'match','once','tokens');

然后:

  1. 匹配将是一个包含“25blah”的字符数组
  2. group 将是一个包含字符串 'blah' 的 1x1 元胞数组。

也就是说,变量 group 将包含您要查找的内容。

破解方法

由于您的前缀始终是两位数,因此您也可以从匹配项的第 3 个字符开始获取所有内容:

my_string = match(3:end);

其他评论

您可能希望通过将 ^ 添加到正则表达式的开头来要求前缀出现在字符串的开头 。例如,使行:

[match, group] = regexp('25blah',sprintf('^%d%d(.*)',2,5),'match','once','tokens');

实际上,您当前的正则表达式将匹配 zzzzzzzzz25stuff 这样的字符串。我不确定你是否想要那个(假设它可以出现在你的数据中)。