How to replace string but not function

3 vues (au cours des 30 derniers jours)
Ravi Goyal
Ravi Goyal le 18 Oct 2016
Commenté : Ravi Goyal le 21 Oct 2016
Dear Community,
In a string like: 'sinh(x).*f.*n'
I want to replace the n with X_Model(1). Using strrep however I end up with
siX_Model(1)h.*f.*X_Model(1)
which means that the n in sinh was also found to be an n and replaced. How can I make it exclusiv, so only if it matches exactly the replacement does take place? In a Matlab Script using 'Find and Replace' I can make this happen when I click 'Match Case' and 'Whole Word', so I want to have this functionality in a function.
Thanks and best Regards Ravi

Réponse acceptée

Sean de Wolski
Sean de Wolski le 18 Oct 2016
Modifié(e) : Sean de Wolski le 18 Oct 2016
This can be done elegantly and safely with Symbolic Math Toolbox
syms x f n model(ix)
expr = sinh(x).*f.*n
subs(expr,n,model(1))
  2 commentaires
Ravi Goyal
Ravi Goyal le 19 Oct 2016
Thanks Sean,
Would you know of any way not using the Symbolic Math Toolbox? Best Regards Ravi
Sean de Wolski
Sean de Wolski le 19 Oct 2016
Not a safe way that is completely fool proof.

Connectez-vous pour commenter.

Plus de réponses (1)

Jan
Jan le 19 Oct 2016
Modifié(e) : Jan le 19 Oct 2016
Str = 'sinh(x).*f.*n'
Str2 = regexprep(Str, '\bn\b'
I cannot test this currently.
[EDITED]
Str2 = regexprep(Str, '(?:^|\W)n(?:$|\W)', 'X_Model(1)')
  3 commentaires
Jan
Jan le 19 Oct 2016
Modifié(e) : Jan le 19 Oct 2016
@Ravi: See [EDITED] Please test this exhaustively, because I'm not a regexp hero.
Ravi Goyal
Ravi Goyal le 21 Oct 2016
Thanks Jan,
It does the job for the n but then fails for the normal replacement of x in sinh(x) by getting rid of the brackets...I guess i gotta go somehow with the symbolic toolbox or just leave it a known bug.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Creating, Deleting, and Querying Graphics Objects dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by