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 3×1 cell array of 1×2 string arrays. I feel like there should be some simple way to unpack that into two separate string arrays.
Best Answer