2012-04-22 22 views
7

Tôi có chuỗi sau đây và tôi đang cố gắng tìm ra phương pháp hay nhất để không thoát khỏi nó.Sử dụng giải mã() so với regex để hủy cảnh báo chuỗi này

Giải pháp phải linh hoạt ở chỗ tôi nhận được đầu vào này từ API và tôi không thể chắc chắn rằng cấu trúc ký tự hiện tại (\n thay vì \r) sẽ luôn giống nhau.

'"If it ain\'t broke, don\'t fix it." \nWent in for a detailed car wash.\nThe attendants raved-up my engine when taking the car into the tunnel. NOTE: my car is...'

regex này có vẻ như nó sẽ làm việc:

text_excerpt = re.sub(r'[\s"\\]', ' ', raw_text_excerpt).strip() 

Tôi đã aso đọc rằng decode() có thể làm việc (và sẽ là một giải pháp tốt hơn nói chung).

raw_text_excerpt.decode('string_unescape') 

Đã thử điều gì đó dọc theo các dòng đó và nó không hoạt động. Bất kỳ đề xuất? Regex có tốt nhất ở đây không?

+1

Có vẻ như một giải pháp hợp lý. Bạn có thể sử dụng lstrip thay vì dải, nhưng đó là một nitpick rất nhỏ. – Wes

+0

Cảm ơn Wes. Tôi đoán tôi muốn giữ nó chung với dải, nhưng có lẽ không cần. Bất kỳ ý tưởng làm thế nào tôi có thể đạt được cùng một đầu ra với giải mã thay vì regex? – Ben

+1

Dường như không có codec như vậy mà bạn đã cố gắng sử dụng: http://docs.python.org/library/codecs.html#codec-base-classes – Wes

Trả lời

16

Codec bạn đang muốn tìm string-escape:

>>> print "\\'".decode("string-escape") 
' 

Tôi không chắc chắn những gì phiên bản mà họ thêm nó vào, mặc dù ... có thể là một phiên bản cũ hơn, bạn đang sử dụng mà không có nó. Tôi đang chạy:

Python 2.6.6 (r266:84292, Mar 25 2011, 19:36:32) 
[GCC 4.5.2] on linux2 
Các vấn đề liên quan