2017-09-15 62 views
-2

我新的Ruby和我想要做以下動作中的紅寶石,除去最後的「_val3」:如何實現%%到分割字符串像貝殼在紅寶石

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

我用回聲$ {val%_ *}來獲得「val1_val2」,但我不知道如何做到這一點在紅寶石。 另外,如何獲得「val1」? 有沒有一種很好的方法來做到這一點?

+0

...你在說shell參數擴展中的'%'或'%%'? –

+0

請解釋(用文字)你想做什麼。不是每個人都知道參數替換是如何工作的 – Stefan

回答

0

您可以使用一個GSUB讓你期望的O/P,

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

並不是Ruby的專家,但我會用正則表達式滾動球:

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

匹配下劃線,後跟任意數量的非下劃線字符串的結尾。什麼都不換。

0

String#rpartition可能會工作:

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

rpartition尋找最後'_'和後隔板本身和部分在返回之前它包含了部分的數組。