如何通过ruby删除行号?

如何通过ruby删除行号?,ruby,regex,Ruby,Regex,像这样的文件中有一些行 1 require 'socket' 2 require 'openssl' ..... 如何删除行号像这样使用regexp^\d+\s。逐行分析文件并将行部分替换为空字符串。像这样使用regexp^\d+\s。逐行分析文件并将行部分替换为空字符串。从名为“test.txt”的文件示例开始: File.write(file_path, File.read(file_path).gsub(/^\d+/, "")) 该代码: File.open('new_test.tx

像这样的文件中有一些行

1 require 'socket'
2 require  'openssl'
.....

如何删除行号

像这样使用regexp
^\d+\s
。逐行分析文件并将行部分替换为空字符串。

像这样使用regexp
^\d+\s
。逐行分析文件并将行部分替换为空字符串。

从名为“test.txt”的文件示例开始:

File.write(file_path, File.read(file_path).gsub(/^\d+/, ""))
该代码:

File.open('new_test.txt', 'w') do |fo|
  File.foreach('test.txt') do |li|
    fo.puts li[/^\d+\s(.+)/, 1]
  end
end
当我运行它时,会得到以下信息:

require 'socket'
require  'openssl'
虽然使用
File.read
IO.read
来“slurp”输入文件并将其作为一个大字符串处理似乎很方便,但它是不可伸缩的。在现实世界中,我们可以获得多GB范围内的文件,而slurping文件可以破坏系统

相反,使用逐行IO,如提供的。它速度惊人,效率极高,一次只能读一行。在我使用巨型文件所做的基准测试中,就速度而言,它很容易在
read
的范围内,但没有消耗所有RAM的潜在威胁


li[/^\d++\s(+)/,1]
是一种快速提取所需零件的方法
/^\d++\s(+)/
表示“从字符串开头开始,查找后跟空格的数字,然后捕获从那里到行尾的所有内容”。从名为“test.txt”的文件示例开始,在中阅读有关Ruby正则表达式实现的更多信息。

该代码:

File.open('new_test.txt', 'w') do |fo|
  File.foreach('test.txt') do |li|
    fo.puts li[/^\d+\s(.+)/, 1]
  end
end
当我运行它时,会得到以下信息:

require 'socket'
require  'openssl'
虽然使用
File.read
IO.read
来“slurp”输入文件并将其作为一个大字符串处理似乎很方便,但它是不可伸缩的。在现实世界中,我们可以获得多GB范围内的文件,而slurping文件可以破坏系统

相反,使用逐行IO,如提供的。它速度惊人,效率极高,一次只能读一行。在我使用巨型文件所做的基准测试中,就速度而言,它很容易在
read
的范围内,但没有消耗所有RAM的潜在威胁


li[/^\d++\s(+)/,1]
是一种快速提取所需零件的方法
/^\d++\s(+)/
表示“从字符串开头开始,查找后跟空格的数字,然后捕获从那里到行尾的所有内容”。在中阅读更多关于Ruby正则表达式实现的信息。

只需数字,而不是后面的空格即可。这是一件非常简单的事情;你真的需要展示你尝试过的东西,并解释它是如何不起作用的。只有数字,而不是后面的空格?一切都可以。这是一件非常简单的事情;你真的需要展示你尝试过的东西,并解释它是如何不起作用的。因为它在行首是空白的,所以我改为
/\s*\d+/,“
。但它看起来不像原始文件。每一行都太长,所以
#
会注释不应该是
sub(/^\d+/,'')的内容
比使用
gsub
更快更有效。因为它在行的开头是空白的,所以我改为
/\s*\d+/,''
。但它看起来不像原始文件。每一行都太长了,所以
#
会对不应该是
sub(/^\d+/,'')的内容进行注释
比使用
gsub
更快更有效。回答得好,ttm。一个关于File.read/IO.read的小细节:一些读者可能会推断文件和IO都有一个读取方法。可能添加(IO#读取),可能带有链接。无需回复,因为我将删除此评论。正如我所说,这是一个非常小的问题。另外,我喜欢你使用的“slurp”。嗯,文件和IO都有
读取
,因为文件继承自IO
File.methods.grep(/\bread\b/)
。没有提到
read
,但是
ri File::read
将显示IO::read的文档。我提到这一点的原因是,当我第一次看到File.read时,我在中查找了它,当然没有找到它。我不得不四处看看,才发现是在IO课上。是的,我应该用
ri
。回答得好,ttm。一个关于File.read/IO.read的小细节:一些读者可能会推断文件和IO都有一个读取方法。可能添加(IO#读取),可能带有链接。无需回复,因为我将删除此评论。正如我所说,这是一个非常小的问题。另外,我喜欢你使用的“slurp”。嗯,文件和IO都有
读取
,因为文件继承自IO
File.methods.grep(/\bread\b/)
。没有提到
read
,但是
ri File::read
将显示IO::read的文档。我提到这一点的原因是,当我第一次看到File.read时,我在中查找了它,当然没有找到它。我不得不四处看看,才发现是在IO课上。是的,我应该使用
ri