我想從時間戳ISO8601
格式中提取分鐘和秒。我做了一些與regexp
的嘗試,但我沒有經驗。用正則表達式分解ISO8601格式時間戳
你能幫我解決嗎?
實例:
- PT1M46S - > 1分鐘,46秒
- PT36S - >36秒
謝謝!
我想從時間戳ISO8601
格式中提取分鐘和秒。我做了一些與regexp
的嘗試,但我沒有經驗。用正則表達式分解ISO8601格式時間戳
你能幫我解決嗎?
實例:
謝謝!
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', '');
使用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循環類似於上面的循環。除了給出的例子,我對這個標準並不熟悉,所以讓我知道它是否不那麼簡單。
感謝您的幫助! – Thoth 2014-10-08 20:21:27