Nested Indexing in a Single Line command
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
S H
am 14 Jan. 2019
Kommentiert: Walter Roberson
am 14 Jan. 2019
Is it possible to extract different data in the following structured string using a single line command?
exp={'George: A5 == BB';...
'Anna: C3 == DD';...
'Smith: E2 == FFF';...
'Ken: G8 == HHHH'};
For example, the obvious method to extract HHHH is the following:
mystr1=split(exp(end),': ',2);
mystr2=split(mystr1(:,2),' == ',2);
mystr2(end)
Can you suggest a single line of command to extract HHHH? Please note all names, right-hand and left-hand sides of the equations can be anything with different lenghts or characters. Only : and == characters are unchanged. The code needs be be universal meaning it sould extract anything (index 3 and 1 for Smith or index 2 and 2 for C3 or index end and end for HHHH) only using a single line command.
4 Kommentare
Bob Thompson
am 14 Jan. 2019
So, all you're looking to do is display the answer? This can be done by unsurpressing the regexp command (remove the semicolon at the end of the line).
Akzeptierte Antwort
Steven Lord
am 14 Jan. 2019
Using the answer from Bob Nbob's comment:
mystr = regexp(exp{end},'\W','split'); mystr = mystr{end};
That's one line (albeit not one command.)
The type of indexing you asked about doesn't exist, at least not directly. You could write an explicit call to subsref to get that in one command, but in my opinion it would be much less clear than writing those two commands.Is there a particular reason why you need it in one command?
If you want to do this to use this in an anonymous function inside a script, and you're using release R2016b or later instead consider creating a local function inside your script file.
Weitere Antworten (1)
Stephen23
am 14 Jan. 2019
Bearbeitet: Stephen23
am 14 Jan. 2019
>> C = {'George: A5 == BB'; 'Anna: C3 == DD'; 'Smith: E2 == FFF'; 'Ken: G8 == HHHH'};
>> D = regexp(C,'^(\w+):\s*(\w+)\s*==\s*(\w+)','tokens','once');
>> horzcat(D{:}) % or VERTCAT, depending on your needs.
ans =
[1,1] = George
[2,1] = A5
[3,1] = BB
[1,2] = Anna
[2,2] = C3
[3,2] = DD
[1,3] = Smith
[2,3] = E2
[3,3] = FFF
[1,4] = Ken
[2,4] = G8
[3,4] = HHHH
4 Kommentare
Walter Roberson
am 14 Jan. 2019
C = {'George: A5 == BB'; 'Anna: C3 == DD'; 'Smith: E2 == FFF'; 'Ken: G8 == HHHH'};
disp(char(regexprep(C, '^.*==\s*', '')))
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!