我有一個字符串,我想獲取下劃線之間的子字符串。如何使用Ruby從以下字符串「hold_sim_D_C3_1_one_aoi」中提取下劃線之間的子字符串?
實施例的輸入字符串:hold_sim_D_C3_1_one_aoi
期望的輸出的子串:SIM,d,C3,如圖1所示,一個
我有一個字符串,我想獲取下劃線之間的子字符串。如何使用Ruby從以下字符串「hold_sim_D_C3_1_one_aoi」中提取下劃線之間的子字符串?
實施例的輸入字符串:hold_sim_D_C3_1_one_aoi
期望的輸出的子串:SIM,d,C3,如圖1所示,一個
可以使用split
與splat assignment以忽略第一和最後一個字:
head, *words, tail = "hold_sim_D_C3_1_one_aoi".split('_')
p words
#=> ["sim", "D", "C3", "1", "one"]
如果您不需要head
或tail
,您可以使用:
或
words = "hold_sim_D_C3_1_one_aoi".split('_')[1..-2]
words
將是一個空數組。
由於您與正則表達式嘗試,可以使用positive lookarounds:
"hold_sim_D_C3_1_one_aoi".scan(/(?<=_).*?(?=_)/)
#=> ["sim", "D", "C3", "1", "one"]
感謝您的答案@Eric Duminil –
毫無意義創造只會污染變量空間的變量。我建議使用'words ='...'。split('_')[1 .. -2]'而不是創建'head'和'tail',無論如何都必須扔掉。你可以用'_,* words,_'來代替'head,* words,tail',但這隻會產生視覺噪音。 –
@theTinMan:確實它污染了變量空間,但我確實發現第一個變體更易於閱讀和理解。我想過'_',但是這可能會讓OP感到困惑,因爲我們分裂了'_'。無論如何,答案已經更新。 –
提供例如輸入和所希望的輸出。 –
仍然沒有預期的輸出。您應該提供一個有效的Ruby對象,因爲期望輸出 –
現在是個問題嗎? –