ruby .split ('\ n') nie dzieli się w nowej linii

82

Dlaczego ten ciąg nie dzieli się na każdy „\ n”? (RUBIN)

"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"]
user2012677
źródło

Odpowiedzi:

174

Potrzebujesz .split("\n"). Aby poprawnie zinterpretować nowy wiersz, potrzebna jest interpolacja ciągów znaków, a podwójne cudzysłowy są jednym ze sposobów, aby to zrobić.

Mori
źródło
39

W Rubim pojedyncze cudzysłowy wokół łańcucha oznaczają, że znaki ucieczki nie są interpretowane. W przeciwieństwie do C, gdzie pojedyncze cudzysłowy oznaczają pojedynczy znak. W tym przypadku '\n'jest faktycznie równoważne "\\n".

Więc jeśli chcesz podzielić się \n, musisz zmienić kod, aby używać podwójnych cudzysłowów.

.split("\n")

jbr
źródło
22

Ruby ma metody String#each_lineiString#lines

zwraca wyliczenie: http://www.ruby-doc.org/core-1.9.3/String.html#method-i-each_line

zwraca tablicę: http://www.ruby-doc.org/core-2.1.2/String.html#method-i-lines

Nie testowałem tego w twoim scenariuszu, ale założę się, że będzie działać lepiej niż ręczne wybieranie znaków nowej linii.

23inhouse
źródło
Ale zauważ, że #linesnie usunie to znaku nowej linii, a #splitzrobi to: "a\nb".lines => ["a\n", "b"]podczas"a\nb".split("\n") => ["a", "b"]
tanius
Ponadto, dla plików czytanych w trybie tekstowym (domyślnie), sekwencje nowej linii są tłumaczone na "\n"( zobacz ). Nie trzeba więc wybierać ich ręcznie. Używaj na "\n"różnych platformach.
tanius
9

Lub wyrażenie regularne

.split(/\n/)
Mark Swardstrom
źródło
3

Nie możesz do tego używać pojedynczych cudzysłowów:

"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")
fotanus
źródło