Sau đây nên làm việc cho ví dụ bạn đưa ra:
str.gsub(/\s+/m, ' ').strip.split(" ")
nó sẽ trả về:
["aa", "bbb", "cc", "dd", "ee"]
Ý nghĩa của mã:
/\s+/m
là phần phức tạp hơn. \s
có nghĩa là khoảng trắng, vì vậy \s+
có nghĩa là một quặng có nhiều ký tự trắng hơn. Trong phần /m
, m
được gọi là công cụ sửa đổi, trong trường hợp này có nghĩa là, nhiều dòng, có nghĩa là truy cập nhiều dòng chứ không phải chỉ là một hành vi mặc định. Vì vậy, /\s+/m
có nghĩa là, tìm các chuỗi của một hoặc nhiều khoảng trắng.
gsub
có nghĩa là thay thế tất cả.
strip
tương đương với trim
bằng các ngôn ngữ khác và xóa khoảng trắng khỏi mặt trước và cuối chuỗi.
Như tôi đã viết giải thích, có thể là trường hợp bạn kết thúc với ký tự cuối dòng ở cuối hoặc đầu chuỗi.
Để được an toàn
Mã này có thể được viết như sau:
str.gsub(/\s+/m, ' ').gsub(/^\s+|\s+$/m, '').split(" ")
Vì vậy, nếu bạn có:
str = "\n aa bbb\n cc dd ee\n\n"
Sau đó, bạn sẽ nhận được:
["aa", "bbb", "cc", "dd", "ee"]
Ý nghĩa của mã mới:
^\s+
một chuỗi các không gian màu trắng ở phần đầu của chuỗi
\s+$
một chuỗi các không gian màu trắng ở phần cuối của chuỗi
Vì vậy gsub(/^\s+|\s+$/m, '')
phương tiện loại bỏ bất kỳ chuỗi trắng không gian ở đầu chuỗi và ở cuối chuỗi.
Cảm ơn bạn đã trả lời, Candide! Bạn (hoặc bất kỳ ai) có thể đưa ra lời giải thích ngắn gọn về mã của bạn không? –
@JJBeck vui lòng xem cập nhật. – Candide
Rubocop không chia nhỏ của bạn ("") vì dấu ngoặc kép. – ablarg