Simplest way to extract multiple tokens from multiple strings and store each type of token in it's own cell array?
8 views (last 30 days)
Show older comments
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.
0 Comments
Accepted Answer
woahs
on 21 Jan 2020
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)
More Answers (0)
See Also
Categories
Find more on Characters and Strings in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!