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');
然后:
- 匹配将是一个包含“25blah”的字符数组
- group 将是一个包含字符串 'blah' 的 1x1 元胞数组。
也就是说,变量 group
将包含您要查找的内容。
破解方法
由于您的前缀始终是两位数,因此您也可以从匹配项的第 3 个字符开始获取所有内容:
my_string = match(3:end);
其他评论
您可能希望通过将 ^
添加到正则表达式的开头来要求前缀出现在字符串的开头 。例如,使行:
[match, group] = regexp('25blah',sprintf('^%d%d(.*)',2,5),'match','once','tokens');
实际上,您当前的正则表达式将匹配 zzzzzzzzz25stuff
这样的字符串。我不确定你是否想要那个(假设它可以出现在你的数据中)。
问题:从 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');
然后:
- 匹配将是一个包含“25blah”的字符数组
- group 将是一个包含字符串 'blah' 的 1x1 元胞数组。
也就是说,变量 group
将包含您要查找的内容。
破解方法
由于您的前缀始终是两位数,因此您也可以从匹配项的第 3 个字符开始获取所有内容:
my_string = match(3:end);
其他评论
您可能希望通过将 ^
添加到正则表达式的开头来要求前缀出现在字符串的开头 。例如,使行:
[match, group] = regexp('25blah',sprintf('^%d%d(.*)',2,5),'match','once','tokens');
实际上,您当前的正则表达式将匹配 zzzzzzzzz25stuff
这样的字符串。我不确定你是否想要那个(假设它可以出现在你的数据中)。