Extreact Information from a String
1 回表示 (過去 30 日間)
古いコメントを表示
Hello, I do have the following Code
d = dir('/home/user/Documents/Data*.inp');
names = {d.name}
which gives me an Array of Strings.
names(1) is like = "Data_c11_t3.322111_id01111_Units.inp"
names(2) is like = "Data_c101_t4.32111_id01112_Units.inp"
etc.
Now I want to extract the time, which is in the name after "t". How can I extract the time in such a format?
Any suggestions?
0 件のコメント
採用された回答
KL
2017 年 11 月 2 日
編集済み: KL
2017 年 11 月 2 日
regexp would be the best idea, I've no big experiences with it, I'll give it a shot anyway,
names = {'Data_c11_t3.322111_id01111_Units.inp';'Data_c101_t4.32111_id01112_Units.inp'};
t = regexp(names,'[0-9]+\.+[0-9*]+','match')
4 件のコメント
Guillaume
2017 年 11 月 3 日
To each their own opinion of course. Regular expressions are designed to extract specific patterns in strings, which, in my opinion is exactly the problem at hand.
その他の回答 (2 件)
Jos (10584)
2017 年 11 月 3 日
Use a sscanf to read the number between the _t and _id, ignoring the varying number after the _c. Use cellfun to apply this to all cells:
names = {'Data_c11_t3.322111_id01111_Units.inp' ; 'Data_c101_t4.32111_id01112_Units.inp'} ;
T = cellfun(@(N) sscanf(N,'Data_c%*d_t%f_id'), names) % "%*d" = the * means skip
3 件のコメント
Coco Newton
2019 年 8 月 2 日
@Jos, this is a great answer
How would I adapt the sscanf formatSpec to extract 130 as a numeric value from this string? I have attached the string array variable that this is example string is taken from.
'Position: (19.59862|1.8|53.84677)Rotation: (0 | 130 | 0)'
Many thanks!
Jos (10584)
2019 年 8 月 5 日
Thanks :-) Something along these lines should work for your input
str = 'Position: (19.59862|1.8|53.84677)Rotation: (0 | 130 | 0)'
A = sscanf(str, 'Position: (%*f|%*f|%*f)Rotation: (%*d | %d | %*d)')
KSSV
2017 年 11 月 2 日
編集済み: KSSV
2017 年 11 月 2 日
str = 'Data_c11_t3.322111_id01111_Units.inp' ;
idx = strfind(str,'_') ;
str2num(str(idx(2)+2:idx(3)-1))
Using regexp:
str = 'Data_c11_t3.322111_id01111_Units.inp' ;
N = str2num( regexprep( str, {'\D*([\d\.]+\d)[^\d]*', '[^\d\.]*'}, {'$1 ', ' '} ) ) ;
t = N(2)
3 件のコメント
参考
カテゴリ
Help Center および File Exchange で Characters and Strings についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!