在MATLAB中解析一串预先指定的格式

时间:2017-08-17 10:30:15

标签: regex string matlab split

我想在MATLAB中解析一个具有预定格式的字符串。例如,我想解析以下字符串,

finally

这样我就可以在&#39;之前得到子字符串,即子字符串&#39; a&#39 ;,括号之间的数字,即1和2,等等on(&#39; +&#39;和&#39; _&#39;之间的子字符串&#39;以及扩展前的子字符串&#39; d。)< / p>

我可以使用s = 'a(1,2)+b_c15_d.ext'regexp来完成,但有更方便的方法吗?

2 个答案:

答案 0 :(得分:2)

使用regexpsplit确实不是那么不方便,你可以在2行中做得很好

r = regexp(s,'[()\+_(_c)(.ext)]', 'split');
r = r(~cellfun(@isempty, r))

>> r = {'a' '1,2' 'b' '15' 'd'}

我不确定这是否与您尝试过的相似,因为您没有发布任何代码。

答案 1 :(得分:2)

  

我可以使用regexp和&#39; split&#39;来做,但我希望有一种更方便的方法。

textscanregexpsplit提供了一种简单,可能方便的替代方案。

 a = textscan(s,'%c(%d,%d)+%c_%c%d_%c.ext');

结果按顺序排列:

 >> a = 

     'a'    [1]    [2]    'b'    'c'    [15]    'd'

如果您的子字符串有多个字符,%c将根据您的需要更改为%[](字符串)。例如:

a = textscan(s,'%[^(](%d,%d)+%[^_]_%[^_]_%[^.].ext') 

上面的%[^(]将收集字符串中的字符,直到字符串结束或字符串上达到'('并将结果放在输出的第一个单元格中。 '('仍然在字符串/流上,所以我们通过读取它直接删除它,如图所示。

sscanf是另一种选择,但更多地涉及操纵输出格式。