Simplest way to extract multiple tokens from multiple strings and store each type of token in it's own cell array?
Ältere Kommentare anzeigen
So lets say I have:
str1="something function abc (a, b, c)"
str2="something function def (d, e, f)"
str3="something else function ghi (g, h, i)"
strarray=[str1;str2;str3]
and I want to end up with the following two string arrays:
functions={"abd"
"def"
"ghi"}
arguments={"a, b, c"
"d, e, f"
"g, h, i"}
What is the simplest way to accomplish this? The simplest thing I've come up with so far is this:
[alltok]=regexp(strarray,'function (\w*) \(([^\)]*)','tokens','once')
alltok2=[alltok{:}]'
functions=alltok2(1:2:end)
arguments=alltok2(2:2:end)
Is there a way to reduce this to 2 lines or even 1 line? If it would help to store the strings as something other than a string array then that's not a problem.
EDIT:
I just figured out how to get it down to two lines:
functions=string(regexp(strarray,'function (\w*)','tokens'))
arguments=string(regexp(strarray,'function \w* \(([^\)]*)','tokens'))
or one big ugly line:
[functions arguments]=deal(string(regexp(strarray,'function (\w*)','tokens')),string(regexp(strarray,'function \w* \(([^\)]*)','tokens')))
Is it time to leave good enough alone or is there a more intuitive way of doing this? In the first option I posted, regexp outputs a 3x1 cell array of 1x2 string arrays. I feel like there should be some simple way to unpack that into two separate string arrays.
Akzeptierte Antwort
Weitere Antworten (0)
Kategorien
Mehr zu Data Type Conversion finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!