でシェルのような文字列を分割する%%実装する方法を、私はルビーに新しいですし、私はルビーで最後の「_val3」を削除するには、次のアクションを実行したい:ルビー
$ val="val1_val2_val3"
$ echo ${val%_*}
val1_val2
私はエコー$を使用するために使用されます{val%_ *} "val1_val2"を取得するが、私はルビでこれを行う方法はありません。 また、「val1」の取得方法は? 良い方法がありますか?
でシェルのような文字列を分割する%%実装する方法を、私はルビーに新しいですし、私はルビーで最後の「_val3」を削除するには、次のアクションを実行したい:ルビー
$ val="val1_val2_val3"
$ echo ${val%_*}
val1_val2
私はエコー$を使用するために使用されます{val%_ *} "val1_val2"を取得するが、私はルビでこれを行う方法はありません。 また、「val1」の取得方法は? 良い方法がありますか?
あなたが予想される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"
ないルビーの専門家が、私はよ正規表現を使用してボールをローリングさせる:
アンダースコアの後にアンダースコアストリングの終わり。何も置き換えないでください。
String#rpartition
はおそらく動作します:
'a-b_c_d'.rpartition('_') #=> ["a-b_c", "_", "d"]
rpartition
は最後'_'
を探し、それより前の部分を含む配列、セパレーター自体とそれの後の部分を返します。
...あなたのシェルパラメータ拡張で '%'や '%%'について話していますか? –
あなたがしたいことを(言葉で)説明してください。誰もがパラメータ置換の仕組みを知っているわけではありません – Stefan