如何在Ruby中循环遍历多行字符串?

60

作为一名首次使用Ruby的程序员,有一个非常简单的问题。

如何在Ruby中循环遍历一段文本?每当遇到换行符时,我希望重新开始内部循环。

def parse(input)
    ...
end
4个回答

121

21

就像Iraimbilanja所说的那样。

或者你可以按照换行符将字符串拆分:

str.split(/\r?\n|\r/).each { |line| … }

请注意,each_line 保留换行符,而 split 则会删除它们。

请注意,我在这里使用的正则表达式将处理所有三种行尾格式。 String#each_line 将行分隔符分开,使用可选参数 sep_string,默认为 $/,它本身默认为简单的 "\n"

最后,如果您想进行更复杂的字符串解析,请查看内置的 StringScanner 类。


4
您可以使用任何模式来完成此操作:
str.scan(/\w+/) do |w|
  #do something
end

-3
str.each_line.chomp do |line|
  # do something with a clean line without line feed characters
end

我认为这应该解决换行问题。


1
那样行不通。没有块的String#each_line返回一个Enumerator,它不响应chomp。Beyond chomp不接受块。 - Chuck
1
类似于 str.each_line.map(&:chomp).each do |line|... 这样的代码可以实现这个功能,但你也可以在 each_line 迭代中一次性完成。 - jwadsack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接