The example strings are: 'Sucrose low10','Sucrose high-100','Erythritol high5','Erythritol low-10', 'Control0'
Select last numeric character(s) of the string
58 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Aleksandra Budzinska
il 25 Apr 2023
Commentato: Dyuman Joshi
il 26 Apr 2023
Hello,
I'm hoping for an advise on the code which has to do with extracting the digits (either 1,2 or 3) from the string which includes different condition names. It's about a rating from -100 to 100 given to different conditions.
In our other script the output gave the ratings saves as: e.g "sucrose: 10". Now it's: e.g. "sucrose10".
How can I extract the last numbers occurring at the end of different strings? I'll provide the code we had below to deal with the separation using ":" which now doesn't work.
log.rating = zeros(height(log),1);
for l = 1:height(log)
if contains(char(log.Code(l)),'score','IgnoreCase',true)
scorestring = char(log.Code(l));
if strcmp(scorestring(end-3:end),'-100')
log.rating(l) = str2double(str(scorestring(end-3:end)));
elseif ~contains(scorestring(end-2:end))
log.rating(l) = str2double(str(scorestring(end-2:end)));
else
log.rating(l) = str2double(str(scorestring(end-1:end)));
end
else
log.rating(l) = NaN;
end
end
Many thanks!!
Risposta accettata
Stephen23
il 25 Apr 2023
Modificato: Stephen23
il 25 Apr 2023
"How can I extract the last numbers occurring at the end of different strings?"
X = "sucrose-10";
Y = str2double(regexp(X,'[-+]?\d{1,3}$','match','once'))
This replaces your innermost IF-ELSEIF-ELSE-END. You could probably use it to replace you entire FOR loop too.
It detects from 1 to 3 digits at the end of the text.
It will also detect an optional +/- sign in front of those digits.
See also:
2 Commenti
Stephen23
il 25 Apr 2023
Modificato: Stephen23
il 25 Apr 2023
Assuming that LOG is a table (you did not explain this in your question):
log = array2table(["scoreABC-23";"DEF 100";"scoreGHI-100";"JKLscore: 99"], 'VariableNames',{'Code'})
idx = contains(log.Code,'score','IgnoreCase',true);
log.Rating = nan(size(log.Code));
log.Rating(idx) = str2double(regexp(log.Code(idx),'[-+]?\d{1,3}$','match','once'))
Don't fight MATLAB with loops and IFs. Think in terms of vectors and matrices.
Più risposte (1)
Kevin Holly
il 25 Apr 2023
output = 'sucrose: 10';
numbers = str2double(extract(output, digitsPattern))
output = "sucrose10";
numbers = str2double(extract(output, digitsPattern))
2 Commenti
Dyuman Joshi
il 26 Apr 2023
"although I don't understand the difference between your first and second code. "
@Aleksandra Budzinska, they are the same code, Kevin just used two different inputs to show the result.
output = 'Sucrose high-100';
numbers = str2double(extract(output, digitsPattern))
Vedere anche
Categorie
Scopri di più su Logical in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!