在我的Rails应用程序中,我正在寻找一种使用模式返回字符串的某些部分的方法。
get_value(string: "21-05-2017-01", pattern: "DD-MM-YYYY-NN", substring: "NN") # => "01"
get_value(string: "21-05-2017-01", pattern: "DD-MM-YYYY-NN", substring: "MM") # => "05"
模式中N
s的数量和位置可能会有所不同。
如何做到这一点?
感谢您的帮助。
答案 0 :(得分:3)
这可能和你想要的一样复杂。但是一个简单的实现可能是。
nodes
答案 1 :(得分:1)
试试这个:
def get_value(hash = {})
hash[:pattern].split('-').zip(hash[:string].split('-')).map { |k,v| v if k == hash[:substring] }.compact.first
end
您可以将其称为
get_value({string: "21-05-2017-01", pattern: "DD-MM-YYYY-NN", substring: "NN"})
# => "01"
答案 2 :(得分:1)
获得" NN"的位置ins" DD-MM-YYYY-NN"它会是
my_index = "DD-MM-YYYY-NN".index("NN")
获得索引后,可以从字符串...
中提取索引(适当的长度)result = "21-05-2017-01"[my_index, "NN".size]
=> "01"
将所有内容放在一起(并处理子字符串不匹配的情况)...
def get_value(options)
return nil if (my_index = options[:pattern].index[options[:substring]) == nil
string[my_index, options[:substring].size)
end
答案 3 :(得分:1)
还有一个解决方案:)
def get_value(string:, pattern:, substring:)
pattern_select = pattern.split('-').zip(string.split('-')).to_h # => {"DD"=>"21", "MM"=>"05", "YYYY"=>"2017", "NN"=>"01"}
pattern_select.fetch(substring, "Undefined substring: #{substring}")
end