2017-09-15 1 views
-2

Je suis nouveau à rubis et je veux faire l'action suivante pour supprimer la dernière « _val3 » en rubis:Comment mettre en œuvre %% à Éclate une chaîne comme la coquille en rubis

$ val="val1_val2_val3" 
$ echo ${val%_*} 
val1_val2 

Je l'habitude d'utiliser echo $ {val% _ *} pour obtenir "val1_val2", mais je ne sais pas comment le faire dans ruby. Aussi, comment obtenir "val1"? Existe-t-il un bon moyen de les faire?

+0

... et parlez-vous de '%' ou '%%' dans l'expansion de votre paramètre shell? –

+0

S'il vous plaît expliquer (en mots) ce que vous voulez faire. Tout le monde ne sait pas comment la substitution de paramètres fonctionne – Stefan

Répondre

0

Vous pouvez utiliser un seul gsub pour obtenir votre attendue o/p,

a = "a-b_c_d" 
# => "a-b_c_d" 
a.gsub /_[a-z]*$/, '' 
# => "a-b_c" 

Ou, vous pouvez utiliser split rubis et rejoindre,

a.split("_")[0..-2].join("_") 
# => "a-b_c" 
+0

comment puis-je supprimer tout _ * avec gsub? – daixiang0

+0

"Single' gsub' "dans ruby ​​est appelé' sub'. – mudasobwa

+0

@ daixiang0: Il suffit d'ajouter un point (.) Avant * cahr => a.gsub /_[a-z].*$/, '' – Mohanraj

1

pas un expert en rubis, mais je vais lancer la balle avec une expression régulière:

a.sub /_[^_]*$/, '' 

Faire correspondre un trait de soulignement suivi d'un nombre quelconque de caractères de soulignement fin de la chaîne. Remplacez avec rien.

0

String#rpartition marcherait probablement:

'a-b_c_d'.rpartition('_') #=> ["a-b_c", "_", "d"] 

rpartition recherche le dernier '_' et retourne un tableau contenant la partie avant lui, le séparateur lui-même et la partie après.