Làm cách nào tôi có thể xóa chuỗi chuỗi \ trong số một chuỗi Ruby?


115

Tôi có chuỗi này:

"some text\nandsomemore"

Tôi cần xóa "\ n" khỏi nó. Tôi đã thử

"some text\nandsomemore".gsub('\n','')

nhưng nó không hoạt động. Tôi phải làm nó như thế nào? Cảm ơn vì đã đọc.

Câu trả lời:


172

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 .

Xem ở đây để biết thêm


17
cú pháp thích hợp sẽ thực sự là .ssub (/ \ n /, "")
boulder_ruby

2
@David đúng. Tuy nhiên, tôi cảm thấy rằng điều quan trọng là chỉ ra rằng các trích dẫn tạo ra sự khác biệt, vì điều đó sẽ có lợi cho Ben vào thời điểm này. Nhắc bạn, David, có lẽ vấn đề về phong cách hơn là "chính xác". Cá nhân tôi nghĩ 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.
ocodo

60

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ì.


3
Trong Ruby 1.9.3 ít nhất, deletekhông phá hủy như được chỉ ra ở đây. Nó trả về một chuỗi mới.
Brent Dillingham

Cũng phát hiện ra. Tôi đã cập nhật đoạn mã đó để sử dụng phiên bản biến đổi String # xóa! thay vì Chuỗi # xóa
Nhà lãnh đạo Paul

56

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.


2
Điều này không trả lời câu hỏi. 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
thelostspore 11/03/2015

1
@mvdanj Có, được cung cấp các chi tiết của câu hỏi cụ thể này, nó không trả lời nó, nhưng nó trả lời câu hỏi chỉ dựa trên tiêu đề. Tôi nghi ngờ đó là lý do tại sao mọi người đã tìm thấy nó hữu ích.
ThomasW

Tiêu đề đã được thay đổi từ khi tôi trả lời ban đầu.
ThomasW

29

Bạn không cần một regex cho việc này. Sử dụng tr:

"some text\nandsomemore".tr("\n","")

sự khác biệt giữa tr một thay thế là gì?
Arnold Roa

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.
Mark Thomas

19

sử dụng chomphoặc các stripchức năng từ Ruby:

"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"

2
Điều này không trả lời câu hỏi. 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
thelostspore 11/03/2015

2
chomp là cách tốt nhất ... không thể tin rằng điều này có quá ít sự
ủng hộ

trong phương thức chomp, \ n và \ r được xóa khỏi cuối str nếu chúng tồn tại, không ở giữa. Vì vậy, điều này không giải quyết được câu hỏi OP
silva96

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.