【问题标题】:Ruby String Parsing with Double Quotes用双引号解析 Ruby 字符串
【发布时间】:2021-10-24 01:29:40
【问题描述】:

在我的 ruby​​ on rails 项目中,我想创建一个包含字符串化数组的字符串。例如:

irb(main):047:0> array = ["a", "b", "c"]
=> ["a", "b", "c"]

现在我想用数组创建一个字符串,以便用双引号围绕每个元素对数组进行字符串化。例如:

"my array is '["a","b","c"]'"

我试过了:

irb(main):051:0> "my array is [#{array.map { |item| %Q["#{item}"] }.join(", ")}]"
=> "my array is [\"a\", \"b\", \"c\"]"

请注意,\ 是不需要的,我想摆脱它们。所以我尝试了

irb(main):056:0> "my array is [#{array.map { |item| %Q["#{item}"] }.join(", ")}]".gsub('\\','')
=> "my array is [\"a\", \"b\", \"c\"]"

请注意,\ 仍然存在。

我如何得到它

"my array is '["a","b","c"]'"

还是不能做? 谢谢!

【问题讨论】:

  • => "my array is [\"a\", \"b\", \"c\"]" 已经正确; IRB 只是“显示”反斜杠来表示这个字符串文字

标签: arrays ruby-on-rails ruby string parsing


【解决方案1】:

由于您使用的是字符串插值,ruby 将不得不转义字符串内的双引号。否则它将创建由所有这些引号分隔的不同字符串。

您可以使用此代码获得相同的结果:

"my array is #{array}"
=> "my array is [\"a\", \"b\", \"c\"]"

请注意,这些反斜杠只是内部的。

所以,基本上,你做得对,只是不需要整个映射的东西。

【讨论】:

    【解决方案2】:

    我知道你问过双引号,但如果你的最终目标是创建一个字符串来演示你是如何创建数组的,你也可以考虑稍微不同地定义你的数组:

    array = %w[a,b,c]
    
    "my array is '%w#{array.to_s.gsub("\"", "")}'"
    
    =>"my array is '%w[a,b,c]'"
    

    【讨论】:

      【解决方案3】:

      如果你想用双引号显示它们,你也可以这样做:

      >> my_array = ["a", "b", "c"]
      => ["a", "b", "c"]
      >> puts('My array is \'["%s", "%s", "%s"]\'' % my_array)
      My array is '["a", "b", "c"]'
      => nil # this is the return of `puts`
      >> puts %q|"My array is '["%s", "%s", and "%s"]'"| % my_array
      => "My array is '["a", "b", and "c"]'"
      

      所以你已经“得到”了你想要的东西,但是在代码上下文中显示它时,需要进行转义,否则它会指示字符串的结尾,但在上面的示例中,我们正在使用输出,而不是 Ruby 上下文中对象的表示。

      我也没有将字符串周围的双引号作为输出,因为它可能不是预期的。 (除非它真的是一个引用。)

      【讨论】:

      • 编辑显示我们也可以在不使用转义符的情况下做到这一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      相关资源
      最近更新 更多