2014-10-08 179 views

回答

1
getPart = @(str, c) str2double(['0' regexp(str, ['\d*(?=' c ')'], 'match', 'once')]); 

str = 'PT36S'; 
seconds = getPart(str, 'S'); 
minutes = getPart(str, 'M'); 
hours = getPart(str, 'H'); 

这会查找字符c,找到它后面的数字并将它们转换为double。它在开头添加字符'0',因为如果regexp找不到匹配项,它将返回一个空字符串。添加这个将空字符串转换为零而不影响其他数字。如果您想将其限制在PT之后的部分,您可以使用原始字符串删除该部分

str = regexprep(str, '^.*PT', ''); 
+0

感谢您的帮助! – Thoth 2014-10-08 20:21:27

1

使用datevec将代表小时,分钟等的字符串转换为相应的数值。请参阅“帮助datestr”以了解datevec第二次输入中使用的符号的规则,即。格式字符串。以下是如何转换给出的两个示例,我将它留给您来扩展它以涵盖整个格式。

str = 'PT36S'; 
str = strrep(str, 'PT', ''); % PT have to go. 
if ~ismember('M', str) 
% To use a single format string, we must write zero minutes if none are there already 
str = ['00M', str]; 
end 

% Date string cannot contain characters y,m,d,H,M or S, so remove these 
str = strrep(str, 'S', ' '); 
str = strrep(str, 'M', ' '); 

% Call datevec with appropriate format string 
[~, ~, ~, ~, min, sec] = datevec(str, 'MM SS') 

您可以扩展这个来管理小时,日子等,通过包含额外的if循环类似于上面的循环。除了给出的例子,我对这个标准并不熟悉,所以让我知道它是否不那么简单。