Как вы перебираете многострочную строку в Ruby? - PullRequest
47 голосов
/ 02 марта 2009

Довольно простой вопрос от начинающего программиста на Ruby.

Как вы перебираете кусок текста в Ruby? Каждый раз, когда встречается новая строка, я хочу перезапустить внутренний цикл.

def parse(input)
    ...
end

Ответы [ 4 ]

104 голосов
/ 02 марта 2009

Строка # each_line

str.each_line do |line|
    #do something with line
end
19 голосов
/ 02 марта 2009

То, что сказал Ираимбиланья.

Или вы можете разбить строку на новые строки:

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

Остерегайтесь того, что each_line сохраняет символы перевода строки, в то время как split ест их.

Обратите внимание, что регулярное выражение, которое я здесь использовал, позаботится обо всех трех форматах окончания строки. String#each_line разделяет строки необязательным аргументом sep_string, который по умолчанию равен $/, который сам по умолчанию просто "\n".

Наконец, если вы хотите выполнить более сложный синтаксический анализ строки, проверьте встроенный класс StringScanner.

3 голосов
/ 02 марта 2009

Вы также можете сделать с любым рисунком:

str.scan(/\w+/) do |w|
  #do something
end
0 голосов
/ 02 марта 2009
str.each_line.chomp do |line|
  # do something with a clean line without line feed characters
end

Я думаю, это должно позаботиться о новых строках.

...