我是ruby的新手,我想执行以下操作以删除最后一个" _val3"在红宝石中:
$ val="val1_val2_val3"
$ echo ${val%_*}
val1_val2
我曾经使用echo $ {val%_ *}来获取" val1_val2",但我不知道如何在ruby中这样做。 另外,如何获得" val1"? 有没有好办法呢?
答案 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
查找最后一个'_'
并返回一个包含其前面部分,分隔符本身及其后部分的数组。