7
votes

Comment puis-je limiter le nombre de remplaçants lors de l'utilisation de GSUB?

Comment limitez-vous le nombre de remplacements fabriqués par chaîne # GSUB dans RUBY?

Dans PHP, cela peut être facile à faire avec Preg_replace qui prend un paramètre pour limiter les remplacements, mais je ne peux pas comprendre comment faire cela dans Ruby.


0 commentaires

4 Réponses :


3
votes

gsub remplace toutes les occurrences.

Vous pouvez essayer une chaîne # sous

http://ruby-doc.org/core/classes/string. html # m001185


1 commentaires

Mince! J'ai parcouru les fonctions de cordes pour trouver autre chose puis GSub, et pourquoi je n'ai pas remarqué Sub!? Merci!



5
votes

Vous pouvez créer un compteur et décrémenter dans une boucle GSUB.

str = 'aaaaaaaaaa'
count = 5
p str.gsub(/a/){if count.zero? then $& else count -= 1; 'x' end}
# => "xxxxxaaaaa"


1 commentaires

Travaille, mais c'est moche. N'y a-t-il pas une meilleure façon?



3
votes
str = 'aaaaaaaaaa'
# The following is so that the variable new_string exists in this scope, 
# not just within the block
new_string = str 
5.times do 
  new_string = new_string.sub('a', 'x')
end

2 commentaires

Je vois. C'est mieux. Mais, lorsque la chaîne de remplacement correspond à la regex, par ex. SUB ('A', 'CAT') , vous devez modifier la regex, par exemple, SUB (/ \ GA /, 'CAT') . Ou est-ce correct?


En fait, \ g ne semblait pas fonctionner pour sous . Il est réinitialisé à chaque fois.



0
votes

Vous pouvez utiliser la méthode str.split , qui prend une limite, avec un joindre avec le remplacement: xxx p> ceci Fonctionne lorsque la chaîne de remplacement correspondrait à la regex puisque la scission est effectuée avant le remplacement: xxx

Vous pouvez également utiliser gsub avec un bloc et Compte et ternaire: xxx

Vous pouvez également utiliser la méthode de l'index de regex avec un .times boucle: xxx

Mais vous ne pouvez pas utiliser de remplacement qui correspond à la regex pour ce dernier: xxx


0 commentaires