Là một phần của một chuỗi hoạt động lớn hơn, tôi đang cố gắng lấy các khối mã thông báo của một chuỗi lớn hơn và loại bỏ dấu chấm câu, từ khóa không phải từ, v.v. nỗ lực ban đầu sử dụng String#gsub
và \W
regexp tính chất giai cấp, như vậy:Các chuỗi ký tự # gsub, unicode và non-word của Ruby
my_str = "Hello,"
processed = my_str.gsub(/\W/,'')
puts processed # => Hello
siêu, siêu, siêu đơn giản. Tất nhiên, bây giờ tôi đang mở rộng chương trình của tôi để đối phó với các nhân vật không phải Latin, và tất cả các heck bị hỏng lỏng lẻo. Ruby của \W
có vẻ là một cái gì đó giống như [^A-Za-z0-9_]
, trong đó, tất nhiên, loại trừ các công cụ với dấu phụ (ü, í, vv). Vì vậy, bây giờ tai nạn của tôi trước đây, đơn giản mã và bỏng trong cách unpleasent:
my_str = "Quística."
processed = my_str.gsub(/\W/,'')
puts processed # => Qustica
ý rằng Gsub() sốt sắng loại bỏ các "í" ký tự có dấu. Một cách mà tôi đã nghĩ đến để sửa lỗi này là mở rộng danh sách trắng của Ruby để bao gồm các điểm mã Unicode cao hơn, nhưng có rất nhiều điểm, và tôi biết tôi sẽ bỏ lỡ một số và gây ra sự cố xuống dòng (và chúng ta thậm chí không bắt đầu suy nghĩ về các ngôn ngữ không phải tiếng Latin ...). Một giải pháp khác là liệt kê tất cả nội dung tôi muốn xóa (dấu chấm câu, $ /%/&/™, v.v.), nhưng, một lần nữa, có rất nhiều điều đó và tôi thực sự không muốn bắt đầu chơi danh sách đen-whack-a-nốt ruồi.
Có ai ngoài đó tìm thấy giải pháp chính cho vấn đề này không? Có một số phiên bản Unicode thân thiện với Unicode của \W
mà tôi chưa phát hiện được không? Cảm ơn!
Gah. Tôi nghĩ tôi đã ở chế độ UTF-8. Điều đó sắp xếp mọi thứ, nhờ sự giúp đỡ! –