Remove text in a string with numbers

How can I remove the text part and obtain a vector of just the last numbers?
e.g
Model1__DK1_5450.0
Model2__DK2_6969.0
Model3__DK3_3398.0

 Respuesta aceptada

Image Analyst
Image Analyst el 20 de Abr. de 2021
Editada: Image Analyst el 20 de Abr. de 2021
You need to use digitsPattern:
txt = 'Model1__DK1_5450.0 '
pat = digitsPattern;
onlyNumbers = extract(txt, pat)
onlyNumbers =
4×1 cell array
{'1' }
{'1' }
{'5450'}
{'0' }
or you can use logical indexing:
digitIndexes = txt >= '0' & txt <= '9';
onlyNumbers = txt(digitIndexes)
onlyNumbers =
'1154500'
Or you can do fancier parsing if you just want certain numbers. Such as:
setOf4Digits = onlyNumbers(3:end-1); % Get only the 5450
Do you want the underlines, dots, and minus signs included?

3 comentarios

Chiara Scarpellini
Chiara Scarpellini el 20 de Abr. de 2021
Editada: Chiara Scarpellini el 20 de Abr. de 2021
i would like the vector to be like this:
5450.0
6969.0
3398.0
-777.0
Is there a way to tell Matlab to remove everything before the number or the minus sign in case there's one?
Well, you can either use indexing like this:
txt = 'Model1__DK1_5450.0 '
lastUnderlineIndex = find(txt == '_', 1, 'last');
% Extract from one past the last underline onwards.
onlyNumbers = strtrim(txt(lastUnderlineIndex + 1: end)) % strtrim gets rid of trailing space.
or you can use the regexp() method like Star shows. Your choice - either works.
In your original post, you posted strings with a trailing space. If you don't have that, you can omit the call to strtrim().
Image Analyst
Image Analyst el 21 de Abr. de 2021
@Chiara Scarpellini, just checking back. You did not accept either answer. Are you still there?

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Characters and Strings en Centro de ayuda y File Exchange.

Preguntada:

el 20 de Abr. de 2021

Comentada:

el 21 de Abr. de 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by