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



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

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

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

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

这引用了整个字符串:

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

但我需要每个元素像这样单独报价:

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

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

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

会得到你想要的。

拆分后引用数组元素

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

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

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

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

这将把params散列拆分为用|分隔的字符串,但不会保留实际的|字符。

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

最新更新