2012-03-06 46 views
11

Tôi cần chia chuỗi thành hai biến. Ví dụ: thông tin sau sẽ hoạt động tốt:Ruby chia tách bằng dấu phẩy hấp thụ dấu cách

first,second = "red,blue".split(',') 

Tôi muốn tách đầu vào của người dùng, có thể có khoảng trống tùy chọn sau dấu phẩy. Làm thế nào để tôi viết nó để một không gian sau khi dấu phẩy được hấp thụ? Tôi cần xử lý chính xác tất cả các khả năng sau:

"red,blue"  # first="red" second="blue" 
"red, blue"  # first="red" second="blue" 
"red,dark blue" # first="red" second="dark blue" 
"red, light blue" # first="red" second="light blue" 

Trả lời

27

Chỉ cần cắt các mục nhập kết quả. Cách bạn thực hiện điều này phụ thuộc vào việc bạn có muốn hỗ trợ chính xác một không gian sau dấu phẩy hay không hoặc bạn có muốn xóa tất cả khoảng trống phía trước (và có thể cả khoảng trống ở cuối). Nếu mục tiêu của bạn là nhận các từ, giống như trong mẫu của bạn, bạn chỉ cần loại bỏ tất cả khoảng trắng xung quanh.

first,second = "red, blue".split(',').map(&:strip) 
+0

Tất nhiên, đây là một lựa chọn tốt hơn. Cảm ơn! – Andrew

11

Không có regexp trong mã của bạn - bạn chia nhỏ bằng cách sử dụng một chuỗi, tạo sự khác biệt. "red,blue".split(/\s*,\s*/) sẽ hoạt động như bạn mong đợi.

+1

Mặc dù đây không phải là một ví dụ được đề cập trong câu hỏi, nhưng điều này sẽ không hoạt động đối với '" màu đỏ, xanh lam "'. –

+0

Tôi biết không có regex trong ví dụ của tôi, ví dụ của tôi là hiển thị mã thực hiện những gì tôi muốn nhưng không xử lý tất cả các biến thể. Tôi đã thử nhiều biến thể regex nhưng họ không bắt được tất cả. – Andrew

+3

Chỉ cần đặt một dấu khác ở trước dấu phẩy: '" đỏ, xanh dương ".split (/ \ s *, \ s * /)' –

Các vấn đề liên quan