Selecting a particular part of a string variable

1 view (last 30 days)
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

Accepted Answer

Jan
Jan on 12 Jul 2012
Edited: Jan on 12 Jul 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

More Answers (2)

Matt Kindig
Matt Kindig on 12 Jul 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 Comments
Jan
Jan on 12 Jul 2012
@antonet: But this was what you were asking for. Please explain "I want to select" exactly.
antonet
antonet on 12 Jul 2012
Edited: antonet on 12 Jul 2012
you are right. I edited my initial question . thank you and sorry

Sign in to comment.


Azzi Abdelmalek
Azzi Abdelmalek on 12 Jul 2012
Edited: Azzi Abdelmalek on 12 Jul 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)

Categories

Find more on Characters and Strings in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!