2017-09-15 9 views
-2

でシェルのような文字列を分割する%%実装する方法を、私はルビーに新しいですし、私はルビーで最後の「_val3」を削除するには、次のアクションを実行したい:ルビー

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

私はエコー$を使用するために使用されます{val%_ *} "val1_val2"を取得するが、私はルビでこれを行う方法はありません。 また、「val1」の取得方法は? 良い方法がありますか?

+0

...あなたのシェルパラメータ拡張で '%'や '%%'について話していますか? –

+0

あなたがしたいことを(言葉で)説明してください。誰もがパラメータ置換の仕組みを知っているわけではありません – Stefan

答えて

0

あなたが予想されるO/Pを取得するために、単一のGSUBを使用することができ、

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

それとも、あなたはルビー分割を使用して参加することができ、

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

gsubですべての_ *を削除する方法はありますか? – daixiang0

+0

「単一の 'gsub'」を「sub」といいます。 – mudasobwa

+0

@ daixiang0:* cahr => a.gsub /_[a-z].*$/、 ''の前にドット(。)を追加するだけです。 – Mohanraj

1

ないルビーの専門家が、私はよ正規表現を使用してボールをローリングさせる:

アンダースコアの後にアンダースコアストリングの終わり。何も置き換えないでください。

0

String#rpartitionはおそらく動作します:

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

rpartitionは最後'_'を探し、それより前の部分を含む配列、セパレーター自体とそれの後の部分を返します。