Câu hỏi Xóa nhiều không gian và các dòng mới bên trong chuỗi


Giả sử chúng ta có chuỗi như sau:

Hello, my\n       name is Michael.

Làm thế nào tôi có thể loại bỏ dòng mới và dải những khoảng trống sau đó vào một bên trong chuỗi để có được điều này?

Hello, my name is Michael.

76
2017-08-18 11:50


gốc




Các câu trả lời:


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

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


148
2017-08-18 12:02



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 pháp này được định nghĩa trong Rails, vì vậy nó sẽ chỉ hoạt động trong các ứng dụng Rails, may mắn là trường hợp của tôi. - Kreeki
cool one :) chưa bao giờ nghe về nó - fl00r
Như Kreeki nói một cách không rõ ràng, đây là một phương pháp Rails, không phải là một phương pháp Ruby.
Đối với ngữ cảnh không phải Rails, sử dụng some_string.strip.gsub(/\s+/, " ") đó là chính xác những gì squish nào. - rapcal
Cảm ơn tất cả các bạn, mẹo rất hay :) - Blue Smith


Để minh họa cho Rubys được tích hợp sẵn siết chặt:

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

33
2017-08-18 12:08



Chỉ cần lưu ý: squeeze sẽ nén TẤT CẢ các chuỗi có nhiều ký tự. Vì vậy, "Bóp bản sao của ứng dụng của tôi" .squeeze => "Squeze bản sao của tôi aplication" - charliepark
Nhưng squeeze(' ') chỉ bóp không gian. "Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy". - steenslag
Ah. Điểm tốt! - charliepark


Cách đơn giản nhất có thể là

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

17
2017-08-18 11:56



Ồ, đó là khó khăn, nhưng nó hoạt động như một sự quyến rũ. - Kreeki


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

4
2017-08-18 11:57



anh ấy cũng muốn xóa \n lý tưởng (tôi cảm thấy) nó nên được thay thế bằng một không gian trong trường hợp của một cái gì đó như "Hello,\nMy name is Michael" - Ali
@Ali, đó là sự thật - fl00r


regex này sẽ thay thế bản sao của 1 hoặc nhiều khoảng trắng bằng 1 khoảng trắng, p.s \s sẽ 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ự chỉ trả lại vận chuyển

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

Đầu tiên thay thế tất cả \n với khoảng trắng, sau đó sử dụng loại bỏ nhiều không gian trắng regex.


4
2017-08-18 11:56



Cảm ơn! Điều này làm việc cho mục đích của tôi để loại bỏ không gian bội số nhưng duy trì không gian duy nhất giữa các từ. - acoustic_north


Sử dụng Chuỗi # gsub:

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

3
2017-08-18 11:56



đầu ra sẽ không chính xác trong trường hợp "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
Bạn nói đúng, tôi đã sửa nó. - Nikola


Thử cái này:

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

3
2018-04-30 13:03



Thanh lịch, cảm ơn bạn! - Vlad
Đây thực sự là câu trả lời "đồng bằng ruby" tốt nhất, và hoạt động đúng cách để tước không gian hàng đầu từ một chuỗi nhiều dòng. - Koen.


Use squish
currency = " XCD"
str = currency.squish
 str = "XCD" #=> "XCD"

1
2017-12-20 05:24