рубин.split ('n') не разбивается на новую строку


почему эта строка не разбивается на каждую "n"? (Руби)

"ADVERTISING [7310]nttIRS NUMBER:tttt061340408nttSTATE OF INCORPORATION:tttDEnttFISCAL YEAR END:ttt0331nntFILING VALUES:nttFORM TYPE:tt10-QnttSEC ACT:tt1934 Actnt".split('n')
5 61

5 ответов:

вам нужно .split("\n"). Строковая интерполяция необходима для правильной интерпретации новой строки, и двойные кавычки-один из способов сделать это.

в рубиновых одинарных кавычках вокруг строки означает, что escape-символы не интерпретируются. В отличие от C, где одинарные кавычки обозначают один символ. В данном случае '\n' фактически эквивалентно "\n".

так что если вы хотите разделить на \n вам нужно изменить код, чтобы использовать двойные кавычки.

.split("\n")

Рубин имеет методы String#each_line и String#lines

возвращает перечислимый: http://www.ruby-doc.org/core-1.9.3/String.html#method-i-each_line

возвращает массив: http://www.ruby-doc.org/core-2.1.2/String.html#method-i-lines

Я не тестировал его против вашего сценария, но я уверен, что он будет работать лучше, чем вручную выбирать символы новой строки.

или регулярное выражение

.split(/\n/)

вы не можете использовать одинарные кавычки для этого:

"ADVERTISING [7310]\n\t\tIRS NUMBER:\t\t\t\t061340408\n\t\tSTATE OF INCORPORATION:\t\t\tDE\n\t\tFISCAL YEAR END:\t\t\t0331\n\n\tFILING VALUES:\n\t\tFORM TYPE:\t\t10-Q\n\t\tSEC ACT:\t\t1934 Act\n\t".split("\n")