[23567,0,0,0,0,0]
,其他值为[452221,0,0,0,0,0]
,值应该连续显示约100个值,然后我想只显示第一个样本23567
和第二个样本中的传感器值452221
,只需显示这些值。为此,我写了一个代码
value = str2double(str(2:7));
see here my attempt
所以我想在输出中找到逗号,只显示第一个逗号前的值
答案 0 :(得分:1)
正如excaza的评论中所提出的,MATLAB有专门的功能,例如sscanf
用于此目的。
sscanf(str,'[%d')
匹配但忽略第一个[
,并将下一个(即第一个)数字作为双变量返回,而不是字符串。
不过,我喜欢使用正则表达式匹配数字的想法。我建议您使用regexp
直接匹配数字,而不是匹配所有的零和逗号,并按''
替换它们。
您可以使用
返回str
中的所有数字(仍为字符串!)
nums = regexp(str,'\d*','match')
并使用
将第一个数字转换为双变量str2double(nums{1})
要仅匹配str
中的第一个数字,我们可以使用正则表达式
nums = regexp(str,'[(\d*),','tokens')
找到[
,然后取任意数量的小数(0-9),并在找到,
时停止。将\d*
括在括号中,只返回括号中的部分,即只返回没有[
和,
的数字。
最后注意:如果您继续使用字符串,则可以/应该考虑regexp
解决方案。如果你将它转换为双倍,使用sscanf
可能更快更容易。
答案 1 :(得分:0)
您可以按如下方式使用regexprep
:
str='[23567,0,0,0,0,0]' ;
required=regexprep(str(2:end-1),',0','')
%Taking str(2:end-1) to exclude brackets, and then removing all ,0
如果在0
之后可能存在,
以外的值,则可以使用以下更通用的方法:
required=regexprep(str(2:end-1),',[-+]?\d*\.?\d*','')