创建一个仅包含字符串字母的数组

时间:2019-11-27 12:43:27

标签: arrays regex ruby string

因此,我正在尝试将字符串\t\n更改为字符串中所有单词字符的数组。我想要的数组如下所示:["t","n"]

到目前为止,我已经尝试过:

input = " \t\n"
array = input.scan(/\w/)

我已经在rubular上的这个字符串上尝试过此正则表达式,并且它与我希望的所有单词字符都匹配。

但是,当使用input.scan(/\w)时,将返回一个空数组。

请原谅我的无知,因为我仍然很陌生,但这为什么呢?

3 个答案:

答案 0 :(得分:0)

我不熟悉ruby,但是您似乎对字符串插值感到困惑。

https://www.ruby-forum.com/t/new-line-in-string/176797

input = " \t\n"

为您提供一个包含空格,制表符和换行符的字符串。

您可能想使用单引号从字面上获取您编写的字符串:

input = ' \t\n'

如果您非常想保留双引号,那么我相信这会起作用:

input = " \\t\\n"

您应该阅读https://blog.appsignal.com/2016/12/21/ruby-magic-escaping-in-ruby.html,以了解有关Ruby中字符串内插的更多信息。我会将您链接到官方文档,但是我缺乏红宝石经验会导致缺乏官方文档经验。

答案 1 :(得分:0)

因此,就像同事在注释中解释的那样,您在"\t\n"字符串中包含的字母不是普通字母,只是一个称为special characters的字母,因此我不确定,但采用这种字符并不容易来自此字符串的原因是\t就像一个字符。

使用像tn这样的普通字符串,您可以执行以下操作

"tn".split("")

并为您提供所需的数组。

但是对于特殊字符,如示例中所示。你可以做这样的事情

a = "\t\n".split("")

a.map! do |e|
  if e == "\t"
    "t"
  elsif e == "\n"
    "n"
  end
end

我相信,这会为您提供所需的结果。

答案 2 :(得分:0)

您在这里!你真的很亲密。

input = " \t\n"
array = input.dump.scan(/\w/)

=> ["t", "n"]

关键是使用String#dump(请参阅:https://ruby-doc.org/core-2.6.5/String.html#method-i-dump