How to extract a number from a string array?

I have a string array of values that look like this: "(164) - (165)" "(165) - (166)" "(165) - (166)" How can extract the first three digit value only so that I get a matrix that is 164 165 165

4 commentaires

Dayne Coleman
Dayne Coleman le 21 Juin 2018
Modifié(e) : Dayne Coleman le 21 Juin 2018
I am also trying to turn a string of Dates and times into a floating point value corresponding to the time. I have a string array that looks like: "Mon Jun 04 16:18:38 EDT 2018" "Mon Jun 04 16:33:29 EDT 2018" and I need a number array that has a decimal for the time of day. (12:00 am would be 0.000, noon would be 0.500)
Juan Fernandez
Juan Fernandez le 21 Juin 2018
Modifié(e) : Juan Fernandez le 21 Juin 2018
Have you looked through the documentation page for the sscanf(_) function? That might provide you a solution.
Yes, I have tried sscanf(_). I don't know if it's a problem with my indexing or the function itself. Here is what I have:
>> whos str_node
Name Size Bytes Class Attributes
str_node 92x1 7248 string
node=sscanf(str_node(:,1),'%f')
I'm getting an error that reads:
"First argument must be a string scalar or character vector."
I got it to work using the strtok(_) function below. Let me know if there are faster, more efficient ways of doing it.
[token,remain]=strtok(str_node,'0,1,2,3,4,5,6,7,8,9');
parsed_node=strtok(remain,')');
node=str2double(parsed_node(:));

Connectez-vous pour commenter.

 Réponse acceptée

Stephen23
Stephen23 le 21 Juin 2018
Modifié(e) : Stephen23 le 21 Juin 2018
"How can extract the first three digit value only so that I get a matrix that is 164 165 165"
With a simple application of regexp and str2double:
>> C = {'(164) - (165)','(165) - (166)','(165) - (166)'};
>> str2double(regexp(C,'\d{3}','match','once'))
ans =
164 165 165

Plus de réponses (1)

Juan Fernandez
Juan Fernandez le 21 Juin 2018
I searched through older questions and found a similar one from 2012. The solution requires the use of regexp(_). Here's my implementation.
str1 = '(164) - (165)';
str2 = '(165) - (166)';
str3 = '(165) - (166)';
strs = {str1,str2,str3};
output = zeros(length(strs),1);
for iter=1:length(strs)
num_strs = regexp(strs{iter},'\d*','Match');
output(iter) = str2double(num_strs{1});
end

Catégories

En savoir plus sur Characters and Strings dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by