我怎样才能擦干这个Ruby代码

我怎样才能擦干这个Ruby代码,ruby,refactoring,dry,Ruby,Refactoring,Dry,如何干燥以下Ruby代码: x = 'a random string to be formated' x = x.split('^')[0] if x.include?('^') x = x.split('$')[0] if x.include?('$') x = x.split('*')[0] if x.include?('*') 我正在寻找非常优雅的ruby one liner,但我很难找到它。 不过,它应该有点可读性 谢谢我想这可能就是你想要的 x、 拆

如何干燥以下Ruby代码:

    x = 'a random string to be formated'
    x = x.split('^')[0] if x.include?('^')
    x = x.split('$')[0] if x.include?('$')
    x = x.split('*')[0] if x.include?('*')
我正在寻找非常优雅的ruby one liner,但我很难找到它。 不过,它应该有点可读性


谢谢

我想这可能就是你想要的


x、 拆分(/\^\$\\*/)

这对我很有用:

x = "a random string to be formatted"
['^', '$', '*'].each { |token|
  x = x.split(token)[0] if x.include?(token)
}

基于您提供的代码

x = 'a random string to be formated'

%w(^ $ *).each do |symbol|
  x = x.split(symbol)[0] if x.include?(symbol)
end

您正在查找此正则表达式:

string.match(/^([^^$*]+)[$^*]?/).captures[0]

它返回所有字符,直到
$、^或*
的第一次出现,或字符串的结尾。

x.split(Regexp.union'^','$','*')
是一样的,但看起来不那么可怕(union方法负责转义)。这就是我一直在寻找的,我也喜欢union方法steenslag,谢谢