2009-11-19 32 views
11

Tôi có một số vấn đề với chuỗi thay thế trong Ruby.Làm thế nào ruby ​​có thể thực hiện tác vụ này (tìm kiếm chuỗi không phân biệt chữ hoa chữ thường và thay thế bằng Ruby)?

Chuỗi gốc của tôi: Con người không giống như động vật.

Tôi muốn thay thế cho: == Điều gì == con người không giống như == what == động vật.

Tôi gặp vấn đề về phân biệt chữ hoa chữ thường khi sử dụng gsub. (ví dụ: Cái gì, cái gì) Tôi muốn giữ lại văn bản gốc.

bất kỳ giải pháp nào?

+2

Một tiêu đề tốt hơn có thể là, "case-insensitive chuỗi tìm kiếm và thay thế trong Ruby". Thay đổi tiêu đề thành một thứ như thế có thể giúp bạn thu hút nhiều người xem câu hỏi của bạn hơn. – donut

Trả lời

20

Nếu tôi hiểu bạn một cách chính xác đây là điều bạn muốn làm:

puts "What the human does is not like what animal does.".gsub(/(what)/i, '==\1==') 

đó sẽ ra

== gì == con người, không có gì không thích == gì == động vật không.

+0

Ví dụ được cập nhật bằng cách sử dụng cờ không phân biệt chữ hoa chữ thường đến regexp như đã được đề xuất bởi brianegge. – hallski

2

Sử dụng block form of gsub.

"What the human does is not like what animal does.".gsub(/(what)/i) { |s| "==#{s}==" } 
=> "==What== the human does is not like ==what== animal does." 
+0

Tôi đã viết chính xác điều tương tự. Đây là tài liệu về gsub: http://ruby-doc.org/core/classes/String.html#M000817 –

+0

Cập nhật liên kết: http://ruby-doc.org/core-2.3.3/String.html# phương pháp-i-gsub – Josh

2

một phiên bản mà không cần dấu ngoặc() trong regex,

puts "What the human does is not like what animal does.".gsub(/what/i,'==\0==') 

== gì == con người, không có gì không thích == gì == động vật không.

3

Điều quan trọng cần tính đến trong tất cả 3 câu trả lời cho đến nay, là việc sử dụng công cụ sửa đổi "i" trên biểu thức chính quy. Đây là cách viết tắt để chỉ định việc sử dụng tùy chọn Regexp::IGNORECASE.

Một hữu ích của Ruby biểu thức chính quy hướng dẫn là here và lớp được ghi chép lại here

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