Selecting a particular part of a string variable

1 vue (au cours des 30 derniers jours)
antonet
antonet le 11 Juil 2012
Dear all,
I have
A={'BARI 500 esd' ...
'DUR NOR 18 df '
}
I want to choose the part of the string that is up to the number that appears in each string
That is, for the above example I want to select
'BARI 500'
'DUR NOR 18'
Is there a way to do that?
thanks

Réponse acceptée

Jan
Jan le 12 Juil 2012
Modifié(e) : Jan le 12 Juil 2012
A = {'BARI 500 esd', ...
'DUR NOR 18 df '};
B = cell(size(A));
for i = 1:numel(A)
a = A{i};
index = find(isstrprop(a, 'digit'), 1);
a = a(1:index);
index = find(~isspace(a), 1, 'last'); % hand coded STRTRIM
B{i} = a(1:index);
end
[EDITED] For your edited question:
for i = 1:numel(A)
a = A{i};
index = find(isstrprop(a, 'digit'), 1, 'last');
B{i} = a(1:index);
end

Plus de réponses (2)

Matt Kindig
Matt Kindig le 12 Juil 2012
Regular expressions might provide an easier way.
fcn = @(s) regexpi(s, '^(\D+)', 'match', 'lineAnchors'); %regex function
B = cellfun( fcn, A); %run on cell array A
B = strtrim(B); %get rid of trailing spaces
  3 commentaires
Jan
Jan le 12 Juil 2012
@antonet: But this was what you were asking for. Please explain "I want to select" exactly.
antonet
antonet le 12 Juil 2012
Modifié(e) : antonet le 12 Juil 2012
you are right. I edited my initial question . thank you and sorry

Connectez-vous pour commenter.


Azzi Abdelmalek
Azzi Abdelmalek le 12 Juil 2012
Modifié(e) : Azzi Abdelmalek le 12 Juil 2012
A={'BARI 500 esd' 'DUR NOR 18 df '};
a=char(A);
[n,m]=size(a);w=[];
for k=1:n
v=[];testp=1;test=0;test2=0
for h=1:m
if length(regexp(a(k,h),'[0-9]'))>0
test=1,testp=0,
end
if test==0 & testp==1
v=[v a(k,h)],test2=1
elseif test==1 & test2==1
v=[v a(k,h)],test=0
else
test2=0,testp=0,test=0
end
end
w=strvcat(w,v);
end
disp(w)

Catégories

En savoir plus sur Characters and Strings dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by