从.split string ruby中删除特殊字符

从.split string ruby中删除特殊字符,ruby,regex,string,Ruby,Regex,String,我使用ruby读取文件,并使用.split来拆分行 Example.txt 一, 二, 三, 我怎样才能得到我所期望的 编辑:这只是一个新行,因为我不能在我的问题中输入一个新行。更具体地说: Example.txt 第一行\n第二行\n第三行 File.open('Example.txt', 'r') do |f1| @line = f1.readlines f1.close end line1,line2,line3=

我使用ruby读取文件,并使用.split来拆分行

Example.txt

一,

二,

三,

我怎样才能得到我所期望的

编辑:这只是一个新行,因为我不能在我的问题中输入一个新行。更具体地说:

Example.txt

第一行\n第二行\n第三行

File.open('Example.txt', 'r') do |f1|  
            @line = f1.readlines
            f1.close    
        end
line1,line2,line3= @line.to_s.split("\n",3)
    #actual
    line1 => ["first_line
    line2 => ", "second_line
    line3 => ", "third_line"]
    #what I expect
    line1=first_line
    line2=second_line
    line3=third_line

如果您试图使用行尾,则无法使用
'\n'
进行拆分。您必须使用
“\n”

使用
'\n'
的字符串不会将
\n
解释为行尾,而是将其视为后跟“n”的反斜杠:


这个问题一点也不清楚,输入文件示例也不清楚,因为给出了一个小示例代码,但是,猜测您希望从期望的结果中得到什么

如果输入是一个名为“example.txt”的文件,如下所示:

1 2 3 或:

然而,当像这样将文件读入内存时,这两种方法都有一个非常糟糕的优先级设置。它被称为“slurping”,如果文件大于可用内存,它可能会使代码崩溃或使代码及其运行的机器爬行。而且,即使它适合内存,在内存分配和重新分配时,将一个巨大的文件加载到内存中也会导致暂停。所以,不要这样做

相反,请逐行读取文件,并尽可能以这种方式进行处理:

File.foreach('example.txt') do |line|
  puts line
end
# >> 1
# >> 2
# >> 3

不要这样做:

File.open('Example.txt', 'r') do |f1|  
            @line = f1.readlines
            f1.close    
        end
Ruby将自动关闭这样打开的文件:

File.open('Example.txt', 'r') do |f1|
  ...
end

无需在块内使用
close

取决于您的确切期望(以及
@line
是什么)。如果您要查找数字,可以使用:

line1, line2, line3 = @line.to_s.scan(/\d/)

如果你想要其他字符,你可以使用其他的正则表达式。

它仍然有问题line1=>[“1 line2=>”,“2 line3=>”,“3”]#我希望line1=1 line2=2 line3=3太好了,非常感谢你的帮助和支持。这只是一个示例文件,我的文件比这个更复杂。那么你想做什么呢?你能提供一些详细信息吗?我用多行阅读了整个文件,然后我用.split来获得每一行,但它在这个->[“,”中有特殊字符,我不知道如何删除它。用regexs来删除它们。如果这些是你想删除的唯一字符,你可以尝试用
@line.to_.scan(/[^\[\],\n]/)
。您的输入应该是什么?文本文件中的三行由一行新行分隔?您显示的是三行由两行新行分隔。您如何读取该文件?
[
]
来源?这些都不在您的输入文件中,也不在您的代码中。实际上,您的问题缺少很多必要的信息,需要更好的澄清。当我放置@line时,它没有[],我猜它来自“.split”,我不知道如何删除它,尽管我只需要使用.gsubFile.readlines的Example.txt,readlines会将文件读入一行数组中
File.foreach('example.txt') do |line|
  puts line
end
# >> 1
# >> 2
# >> 3
File.open('Example.txt', 'r') do |f1|  
            @line = f1.readlines
            f1.close    
        end
File.open('Example.txt', 'r') do |f1|
  ...
end
line1, line2, line3 = @line.to_s.scan(/\d/)