Loại bỏ nhiều khoảng trắng và các dòng mới bên trong Chuỗi


104

Giả sử chúng ta có chuỗi như thế này:

Hello, my\n       name is Michael.

Làm cách nào để xóa dòng mới đó và tách các khoảng trắng đó thành một bên trong chuỗi để lấy dòng này?

Hello, my name is Michael.

Câu trả lời:


188

kiểm tra squishphương pháp Rails :

http://apidock.com/rails/String/squish


6
Giải pháp đơn giản và thanh lịch nhất. Cảm ơn. Nhưng có một điều, phương thức này được định nghĩa trong Rails, vì vậy nó sẽ chỉ hoạt động trong các ứng dụng Rails, rất may đó là trường hợp của tôi.
Kreeki

4
Như Kreeki đã nói một chút không rõ ràng, đây là một phương thức Rails, không phải một phương thức Ruby.

17
Đối với ngữ cảnh không phải Rails, hãy sử dụng some_string.strip.gsub(/\s+/, " ")chính xác những gì squish làm.
rapcal

1
Cảm ơn bạn! Không biết vềsquish
Francois

38

Để minh họa Rubys tích hợp trong bóp :

string.gsub("\n", ' ').squeeze(' ')

3
Chỉ cần lưu ý: bóp sẽ nén TẤT CẢ các chuỗi có nhiều ký tự. Vì vậy, "Bóp bản sao ứng dụng của tôi" .squeeze => "Squeze bản sao aplication tôi"
charliepark

8
Nhưng squeeze(' ')chỉ bóp nghẹt khoảng trống. "Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy".
steenslag

22

Cách đơn giản nhất có lẽ sẽ là

s = "Hello, my\n       name is Michael."
s.split.join(' ') #=> "Hello, my name is Michael."

8

Thử cái này:

s = "Hello, my\n       name is Michael."
s.gsub(/\n\s+/, " ")

Đây thực sự là câu trả lời "ruby đơn giản" tốt nhất và hoạt động đúng cách để tách các khoảng trắng ở đầu khỏi một chuỗi nhiều dòng.
Koen.

5
my_string = "Hello, my\n       name is Michael."
my_string = my_string.gsub( /\s+/, " " )

anh cũng sẽ như để loại bỏ các \nlý tưởng (tôi cảm thấy) nó phải được thay thế với một không gian trong trường hợp của một cái gì đó giống như"Hello,\nMy name is Michael"
Ali

4

regex này sẽ thay thế trường hợp của 1 hoặc nhiều khoảng trắng bằng 1 khoảng trắng, ps \ssẽ thay thế tất cả các ký tự khoảng trắng bao gồm \s\t\r\n\f:

a_string.gsub!(/\s+/, ' ')

Tương tự đối với chỉ ký tự xuống dòng

str.gsub!(/\n/, " ")

Đầu tiên thay thế tất cả \nbằng khoảng trắng, sau đó sử dụng regex xóa nhiều khoảng trắng.


Cảm ơn! Điều này hoạt động cho mục đích của tôi để loại bỏ nhiều khoảng trắng nhưng duy trì khoảng trắng đơn giữa các từ.
acoustic_north

3

Sử dụng Chuỗi # gsub :

s = "Hello, my\n       name is Michael."
s.gsub(/\s+/, " ")

đầu ra sẽ không đúng trong trường hợp của "Hello,\nMy name is Michael". Lý tưởng nhất là bạn sẽ muốn có một không gian, nơi có một\n
Ali


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.