2012-05-08 77 views
13

Tôi muốn chuyển đổi một chuỗi ký tự như r"r'\nasdf'" thành một chuỗi ('\\nasdf' trong trường hợp này).Python chuyển đổi chuỗi ký tự thành chuỗi

Trường hợp khác: r"'\nasdf'" đến '\nasdf'. Tôi hy vọng bạn nhận được nó.

Điều này rất quan trọng vì tôi có một trình phân tích cú pháp các tập lệnh python, muốn biết nội dung chính xác của chuỗi ký tự.

Có phải giải pháp thông minh là eval không? Các chuỗi ký tự được lọc trước (với tokenize) và không nên gây ra các khoản nợ phải trả. Không có bất kỳ giải pháp nobler nào khác ngoài việc đánh giá một chữ? Một thư viện phân tích cú pháp có thể?

Chỉnh sửa: Đã thêm các ví dụ khác để tránh hiểu lầm.

+0

đó sẽ là chuỗi 'thô', không phải là 'chữ' –

+0

Tôi nghĩ rằng tôi đã không xây dựng câu hỏi của mình đúng, tôi đang cố gắng làm lại ngay. Tôi có nghĩa là chuỗi chữ, không phải chuỗi thô. –

+0

đủ rõ ràng. và literal_eval là giải pháp nobler :) –

Trả lời

16

Bạn muốn ast module:

>>> import ast 
>>> raw = r"r'\nasdf'" 
>>> ast.literal_eval(raw) 
'\\nasdf' 
>>> raw = r"'\nasdf'" 
>>> ast.literal_eval(raw) 
'\nasdf' 

Đây là một phương pháp an toàn để đánh giá/phân tích chuỗi có chứa mã nguồn Python (không giống như eval()).

8

Có, có:

>>> s = r'\nasdf' 
>>> s.decode('string-escape') 
'\nasdf' 
+0

Xin lỗi, câu hỏi của tôi không quá rõ ràng (tôi đã chỉnh sửa). Đây là chuỗi thô để chuyển đổi chuỗi, không phải chuỗi ký tự thành chuỗi chuyển đổi. –

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