regexprep does not exactly what I want

2 vues (au cours des 30 derniers jours)
hyble
hyble le 16 Oct 2019
Commenté : hyble le 17 Oct 2019
Dear all,
I have the following cell array
Charge = {'OH-1'} {'KOH+0'} {'K+1'} {'I-1'} {'HI+0'} {'H3O+1'} {'H2O+0'}
I want to remove all information before the + and - signs. Therefore I tried the following:
regexprep(Charge,'[^-+].','');
which produces
{'-1'} {'0'} {'1'} {'1'} {'+0'} {'1'} {'0'}
This works well except in case of only one character in front of the minus sign (i.e. in case of I-1). In that case, the - sign is also deleted. The - signs are crucial to be included, the + signs not.
Any suggestions?
Thanks, Tim

Réponse acceptée

Daniel M
Daniel M le 16 Oct 2019
Modifié(e) : Daniel M le 16 Oct 2019
There's definitely a way to do it using regexprep, but I found this solution first, so hopefully it is sufficient.
Charge = {'OH-1','KOH+0','K+1','I-1','HI+0','H3O+1','H2O+0'};
c = regexp(Charge,'[-+]\w*','match');
cc = cat(2,c{:}); % put back into cell array
  6 commentaires
Guillaume
Guillaume le 16 Oct 2019
The comment about the regexprep referred to the original question, not your answer.
I wrote most of my comment shortly after you posted your answer but had to dash off to a meeting before posting it. When I finally posted it, it was a bit out of date. Sorry about that.
hyble
hyble le 17 Oct 2019
Many thanks to all of you for helping out here!

Connectez-vous pour commenter.

Plus de réponses (1)

Stephen23
Stephen23 le 16 Oct 2019
Modifié(e) : Stephen23 le 16 Oct 2019
>> regexprep(Charge,'^[^-+]*','')
ans =
'-1' '+0' '+1' '-1' '+0' '+1'
>> regexp(Charge,'[-+].+$','once','match')
ans =
'-1' '+0' '+1' '-1' '+0' '+1'
  1 commentaire
Daniel M
Daniel M le 16 Oct 2019
This will handle edge cases better than my solution above. More robust.

Connectez-vous pour commenter.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by