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


82

Почему эта строка не разбивается на каждый «\ 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')
>> ["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"]

Ответы:


174

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


39

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

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

.split("\n")


22

У Ruby есть методы 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

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


Но обратите внимание, что #linesне удалит символ новой строки, а #splitбудет делать это: "a\nb".lines => ["a\n", "b"]while"a\nb".split("\n") => ["a", "b"]
tanius

Кроме того, для файлов, читаемых в текстовом режиме (по умолчанию), последовательности новой строки переводятся в "\n"( см. ). Так что не нужно выбирать их вручную. Используйте на "\n"разных платформах.
tanius


3

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

"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")
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.