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ư \n
thể 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 .delete
hoặc .tr
Chuỗi để xóa các dòng mới .
tr
là 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#delete
này dễ đọc hơn gsub
vì bạn không thực sự thay thế chuỗi bằng bất cứ thứ gì.
delete
khô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 strip
phươ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.
strip
chỉ 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","")
replace
chỉ thay đổi chuỗi thành một chuỗi mới, như gán biến; trong khi đó tr
là một tìm kiếm và thay thế toàn cầu theo từng nhân vật.
sử dụng chomp
hoặc các strip
chức năng từ Ruby:
"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"
strip
chỉ 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