2011-01-18 45 views
14

Tôi đang cố lấy dữ liệu từ cơ sở dữ liệu MySQL và sử dụng Ruby để định dạng lại nó thành tệp văn bản phẳng. Một số dữ liệu MySQL của tôi chứa dấu ngoặc kép như vậy:Xóa dấu nháy kép khỏi chuỗi

Matthew "Matt" Perry

và tôi cần phải loại bỏ những dấu ngoặc kép và thay thế bằng cái gì khác, | ví dụ.

Tôi tìm thấy một bài đăng trên stackoverflow về loại bỏ dấu ngoặc kép mà đề nghị như sau:

s.scan(/'(.+?)'|"(.+?)"|([^ ]+)/).flatten.compact 

nhưng đó trả về chuỗi nguyên vẹn (có dấu ngoặc kép). Làm thế nào tôi có thể nhận được

Matthew |Matt| Perry

để thay thế?

Trả lời

22

này sẽ làm điều đó nếu bạn không muốn thay đổi s:

new_s = s.gsub /"/, '|' 

Nếu bạn muốn thay đổi s:

s.gsub! /"/, '|' 
0

Nó loại bỏ doublequotes. Bạn có thể thấy chúng trong IRB hoặc khi chỉ sử dụng p chỉ vì chuỗi đang được hiển thị cho bạn trong các trường hợp này ở dạng đẹp, cho phép bạn thấy, rằng chúng là chuỗi.

irb> 'Matthew "Matt" Perry'.scan(/'(.+?)'|"(.+?)"|([^ ]+)/).flatten.compact 
=> ["Matthew", "Matt", "Perry"] 

Thực tế, chúng chưa có dấu ngoặc kép.

irb> puts 'Matthew "Matt" Perry'.scan(/'(.+?)'|"(.+?)"|([^ ]+)/).flatten.compact 
Matthew 
Matt 
Perry 
=> nil 

Và để thay thế doublequotes với dấu gạch ngang, bạn có thể sử dụng .tr:

irb> 'Matthew "Matt" Perry'.tr '"','|' 
=> "Matthew |Matt| Perry" 
+0

Thank tất cả các bạn cho sự giúp đỡ của bạn! – Libby

0

lựa chọn khác là:

s.tr! '"', '|' 
s2 = s.tr '"', '|' 
4

Bạn có thể sử dụng một cái gì đó như:

text = 'Matthew "Matt" Perry' 

text.tr(%q{"'}, '|') # => "Matthew |Matt| Perry" 

text = "Matthew 'Matt' Perry" 
text.tr(%q{"'}, '|') # => "Matthew |Matt| Perry" 
+0

Công cụ đánh dấu cú pháp của SO thất bại một lần nữa) – Nakilon

+0

đó là vì nó rất "độc đáo" và "đặc biệt". :-) –

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