Câu trả lời:
Bạn cần sử dụng "\n"không '\n'trong gsub của bạn. Các dấu ngoặc kép khác nhau hành xử khác nhau.
Dấu ngoặc kép "cho phép mở rộng ký tự và nội suy biểu thức tức là. họ cho phép bạn sử dụng các ký tự điều khiển đã thoát như \nthể hiện giá trị thực của chúng, trong trường hợp này là dòng mới và cho phép sử dụng #{expression}để bạn có thể dệt các biến và, hầu như bất kỳ biểu thức ruby nào bạn muốn vào văn bản.
Mặt khác, các trích dẫn đơn 'xử lý chuỗi theo nghĩa đen, do đó không có sự mở rộng, thay thế, nội suy hoặc những gì có bạn.
Trong trường hợp cụ thể này, tốt hơn là sử dụng phương thức .deletehoặc .trChuỗi để xóa các dòng mới .
trlà một lựa chọn tốt hơn cho nhiệm vụ này, nhưng như tôi nói, tôi nghĩ tốt hơn là chỉ ra sự khác biệt trong dấu ngoặc đơn, kép khi tôi trả lời.
Khi bạn muốn xóa một chuỗi, thay vì thay thế nó, bạn có thể sử dụng String#delete(hoặc trình biến đổi tương đương của chuỗi String#delete!), ví dụ:
x = "foo\nfoo"
x.delete!("\n")
x bây giờ bằng "faggeroo"
Trong trường hợp cụ thể String#deletenày dễ đọc hơn gsubvì bạn không thực sự thay thế chuỗi bằng bất cứ thứ gì.
deletekhông phá hủy như được chỉ ra ở đây. Nó trả về một chuỗi mới.
Nếu bạn muốn hoặc không bận tâm đến việc loại bỏ tất cả các khoảng trắng hàng đầu và dấu kiểm từ chuỗi của bạn, bạn có thể sử dụng stripphương thức này.
" hello ".strip #=> "hello"
"\tgoodbye\r\n".strip #=> "goodbye"
như đã đề cập ở đây .
chỉnh sửa Tiêu đề ban đầu cho câu hỏi này là khác nhau. Câu trả lời của tôi là cho câu hỏi ban đầu.
stripchỉ xóa khoảng trắng hàng đầu và dấu vết: ruby-doc.org/core-1.9.3/String.html#method-i-strip-21
Bạn không cần một regex cho việc này. Sử dụng tr:
"some text\nandsomemore".tr("\n","")
replacechỉ thay đổi chuỗi thành một chuỗi mới, như gán biến; trong khi đó trlà một tìm kiếm và thay thế toàn cầu theo từng nhân vật.
sử dụng chomphoặc các stripchức năng từ Ruby:
"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"
stripchỉ xóa khoảng trắng hàng đầu và dấu vết - ruby-doc.org/core-1.9.3/String.html#method-i-strip-21