如何在由管道字符分隔的字符串中单独引用单词?

时间:2013-07-29 19:05:31

标签: ruby-on-rails ruby string split escaping

我的params哈希包含字符串值,如:

маслёнка | масло

我的方法目前有这段代码:

s = %Q{(@content "#{params[:structure]}")}

引用整个字符串:

(@content "маслёнка | масло")

但我需要单独引用每个元素:

(@content "маслёнка" | "масло")

我知道我需要通过|符号将我的params字符串拆分为子字符串,但元素需要单独引用并用竖线字符分隔。我怎么能在这里做到这一点?

3 个答案:

答案 0 :(得分:1)

input.split(" | ").map {|s| "\"" + s + "\""}.compact.join(" | ")

会得到你想要的东西。

答案 1 :(得分:1)

分割后引用数组元素

您的问题是由引用要求的复杂性引起的。解决此问题的一种方法是使用Kernel#sprintf和Ruby的备用双引号文字(%Q)来构建字符串。例如:

s = sprintf '(@content %s)',
            params[:structure].split( /\s+\|\s+/ ).
            map { |elem| %Q["#{elem}"] }.
            join(" | ")
# => "(@content \"маслёнка\" | \"масло\")"

您可以使用Kernel#puts验证字符串是否已正确转义,在这种情况下会产生:

  

(@ content“маслёнка”|“масло”)

答案 2 :(得分:0)

这会将params哈希拆分为由|分隔的字符串,但不会保留实际的|字符。

s = %Q{(@content "#{params[:structure].split('|')}")}