如何实现%%在ruby中拆分shell之类的字符串

时间:2017-09-15 07:00:31

标签: ruby shell split

我是ruby的新手,我想执行以下操作以删除最后一个" _val3"在红宝石中:

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

我曾经使用echo $ {val%_ *}来获取" val1_val2",但我不知道如何在ruby中这样做。 另外,如何获得" val1"? 有没有好办法呢?

3 个答案:

答案 0 :(得分:1)

不是红宝石专家,但我会用正则表达式滚动球:

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

匹配下划线,后跟字符串末尾的任意数量的非下划线。什么都不用。

答案 1 :(得分:0)

您可以使用单个gsub来获得预期的o / p,

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

或者,您可以使用ruby split和join,

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

答案 2 :(得分:0)

String#rpartition可能有效:

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

rpartition查找最后一个'_'并返回一个包含其前面部分,分隔符本身及其后部分的数组。