Simplest way to extract multiple tokens from multiple strings and store each type of token in it's own cell array?
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Philip M
el 21 de En. de 2020
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 comentarios
Respuesta aceptada
woahs
el 21 de En. de 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)
1 comentario
Más respuestas (0)
Ver también
Categorías
Más información sobre Characters and Strings en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!