繁体   English   中英

使用Ruby从文件中的一行中提取第一个单词

[英]Extract first word from a line in a file using Ruby

我如何从每一行中得到第一个单词? 感谢Stack Overflow上某人的帮助,我正在使用以下代码:

File.open("pastie.rb", "r") do |file|
  while (line = file.gets)
    next if (line[0,1] == " ")
    labwords = line.split.first
    print labwords.join(' ')
  end
end

它从每一行中提取第一个单词,但是空格有问题。 我需要调整它的帮助。 我需要使用first一种方法,但是我不知道如何使用它。

如果您想要文件中每一行的第一个单词:

first_words = File.read(file_name).lines.map { |l| l.split(/\s+/).first }

很简单 让我们分开:

File.read(file_name)

读取文件的全部内容,并将其作为字符串返回。

.lines

用换行符( \\n )分割字符串,并返回字符串数组。 每个字符串代表一条“线”。

.map { |l| ... }

Array#map调用提供的块,传入每个项目并获取该块的返回值以构建新的数组。 Array#map完成后,它将返回包含新值的数组。 这使您可以转换值。 在此处的样本框中|l| 是block params部分,这意味着我们接受一个参数,并将其引用为l

|l| l.split(/\s+/).first

这是内部的块,为了完整起见,我也继续在这里包括块参数。 在这里,我们将行除以/\\s+/ 这是一个正则表达式, \\s表示任何空格\\t \\n和空格),其后的+表示一个或多个,因此\\s+表示一个或多个空格字符 ,当然,它将尝试匹配尽可能多的连续字符尽可能使用空格字符。 将其传递给String#split将返回给定的分隔符之间出现的子字符串数组。 现在,我们的分隔符是一个或多个空格,因此我们应该在空格之间获取所有内容。 如果我们有字符串"A list of words" ["A", "list", "of", "words"]在拆分调用后将得到["A", "list", "of", "words"] 非常有用 最后,我们调用.first ,它返回数组的第一个元素(在本例中为“第一个单词”)。

现在,在Ruby中,将自动返回块中最后一个表达式的求值,因此将返回我们的第一个单词,并且考虑到该块已传递给map,我们应该从文件中获取第一个单词的数组。 为了演示,让我们来输入(假设我们的文件包含):

This is line one
And line two here
Don't forget about line three
Line four is very board
Line five is the best
It all ends with line six

通过上面的行运行它,我们得到:

["This", "And", "Don't", "Line", "Line", "It"]

这是每行的第一个单词。

考虑一下:

def first_words_from_file(file_name)
  lines = File.readlines(file_name).reject(&:empty?)
  lines.map do |line|
    line.split.first
  end
end

puts first_words_from_file('pastie.rb')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM