converting cells with strings inside cells into strings inside cells

I use the following code: cellfun(@(x) regexp(x, '@(.*)@', 'tokens'), array_of_strings) The idea is to replace all the strings in the array with only the substring between the @'s. It works, the only problem is that the 'tokens' option leaves me with cells inside cells, which is inconvenient. My questions are: 1. Is there an alternative way to do it without getting cells inside cells? 2. It is interesting for me to know if there is a function that converts "cell arrays with strings inside a cell array" into simply "strings in a cell array". Thanks

2 Kommentare

Can you show a sample of array_of_strings?
array_of_strings = {'a @one@', 'a @two@', 'a@three@'};

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Paolo
Paolo am 24 Jul. 2018
Bearbeitet: Paolo am 24 Jul. 2018
cellfun(@(x) regexp(x,'(?<=@)(.*)(?=@)','match'),array_of_strings)
Or
cellfun(@(x) regexp(x,'(?<=@)(.*)(?=@)','tokens','once'),array_of_strings)

6 Kommentare

This is a nice solution. Thank you.
Also I would be happy to know if there is an answer for question 2.
You are welcome. Not sure I follow the second question, do you mean going from:
nested = {{'one','two'}}
To
unnested = nested{:}
?
I'm sorry, now I realized my original code didn't reproduce what I meant for question 2.
The cellfun was supposed to be with UniformOutput set to false:
array_of_strings = {'a @one@', 'a zero', 'a @two@', 'a @three@'};
% now we have to set it to false because one cell is going to become empty.
new_array = cellfun(@(x) regexp(x, '@(.*)@', 'tokens'), array_of_strings, 'UniformOutput', false);
% remove the empty cells
new_array = new_array(~cellfun('isempty', new_array))
What I get now is: 1×3 cell array
{1×1 cell} {1×1 cell} {1×1 cell}
Now I don't want these to be cells inside a cell array, but rather just strings as before.
Of course, your 2 solutions solved this problem to begin with. But I was interested if there is any function to "fix" this new condition.
>>horzcat(new_array{:})
{'one'} {'two'} {'three'}
Does this help?
Micha
Micha am 24 Jul. 2018
Bearbeitet: Micha am 24 Jul. 2018
That seems to do the trick
Thanks!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Characters and Strings finden Sie in Hilfe-Center und File Exchange

Produkte

Version

R2017b

Gefragt:

am 24 Jul. 2018

Bearbeitet:

am 24 Jul. 2018

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by