我想在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
来完成,但有更方便的方法吗?
答案 0 :(得分:2)
使用regexp
和split
确实不是那么不方便,你可以在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;来做,但我希望有一种更方便的方法。
textscan
为regexp
和split
提供了一种简单,可能方便的替代方案。
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
是另一种选择,但更多地涉及操纵输出格式。