MATLAB: Simplest way to extract multiple tokens from multiple strings and store each type of token in it’s own cell array

MATLABregexpstring arraystokens

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

Not entirely sure what you're asking for since it sounds like you were able to achieve what you wanted but here's a way to do it with fewer lines of code, albiet possibly more confusing:
[alltok]=regexp(strarray,'function (\w*) \(([^\)]*)','tokens','once')
[functions, arguments] = cellfun(@(x) deal(x{1}, x{2}), alltok, 'UniformOutput', false)