14
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Làm cách nào để thay thế "bằng \" trong chuỗi python?
Tôi có một chuỗi có dấu ngoặc kép:
s = 'a string with "double" quotes'
Tôi muốn thoát khỏi các trích dẫn kép với một dấu gạch chéo ngược.
Làm như sau không hoàn toàn hoạt động, nó thoát ra với hai dấu gạch chéo ngược:
s.replace['"', '\\"']
'a string with \\"double\\" quotes'
In đầu ra của chuỗi đó cho thấy những gì tôi muốn. Nhưng tôi không chỉ muốn in đúng chuỗi, tôi muốn nó được lưu trong một biến. Bất cứ ai có thể giúp tôi với biểu hiện chính xác chính xác?
Đã hỏi ngày 23 tháng 6 năm 2011 lúc 19:47Jun 23, 2011 at 19:47
Nỗ lực ban đầu của bạn hoạt động tốt. Các dấu gạch chéo ngược đôi mà bạn thấy chỉ đơn giản là một cách hiển thị các dấu gạch chéo ngược thực sự có trong chuỗi. Xem thêm: __repr__[]
>>> s = 'a string with "double" quotes'
>>> ss = s.replace['"', '\\"']
>>> len[s]
29
>>> len[ss]
31
Đã trả lời ngày 23 tháng 6 năm 2011 lúc 20:00Jun 23, 2011 at 20:00
ʇsәɹoɉʇsәɹoɉʇsәɹoɈ
21.7K7 Huy hiệu vàng52 Huy hiệu bạc60 Huy hiệu Đồng7 gold badges52 silver badges60 bronze badges
Chuỗi là chính xác. Nhưng repr
sẽ sử dụng chính biểu tình ngược để hiển thị các ký tự không thể in được và tính nhất quán [nó được cho là tạo thành một chuỗi trăn theo nghĩa đen, khi được đánh giá, đưa ra cùng một chuỗi là đầu vào cho repr
] sợi dây.
Lưu ý rằng đây là một thuật toán thoát ra khá hạn chế. Tùy thuộc vào những gì bạn cần nó, bạn có thể phải mở rộng nó đáng kể [hoặc có một giải pháp làm sẵn, ví dụ: các câu lệnh tiền xử lý khi làm việc với cơ sở dữ liệu]
Đã trả lời ngày 23 tháng 6 năm 2011 lúc 19:52Jun 23, 2011 at 19:52
Điều này đã làm công việc cho tôi.
s.replace['"', '\\"']
Đã trả lời ngày 27 tháng 3 năm 2017 lúc 12:04Mar 27, 2017 at 12:04
Dinadinadina
8271 Huy hiệu vàng12 Huy hiệu bạc27 Huy hiệu đồng1 gold badge12 silver badges27 bronze badges
Không thể nhìn thấy một dấu gạch chéo ngược, nhưng dấu gạch chéo ngược vẫn còn trong chuỗi. Nếu bạn sẽ kiểm tra độ dài của cùng một chuỗi, bạn sẽ có thể thấy câu trả lời. Ngoài ra, nếu bạn sẽ thay thế chuỗi mới một lần nữa bằng dấu ngoặc kép, bạn sẽ nhận được chuỗi gốc.
Đã trả lời ngày 24 tháng 6 năm 2011 lúc 5:10Jun 24, 2011 at 5:10
Sam Samsam
17.6K24 Huy hiệu vàng78 Huy hiệu bạc115 Huy hiệu đồng24 gold badges78 silver badges115 bronze badges
Các câu trả lời khác có thể nguy hiểm và thất bại
Ví dụ:
- Chuỗi nghĩa đen
1 [ví dụ: ____ 12] sẽ trở thànhs.replace['"', '\\"'] 'a string with \\"double\\" quotes'
3 không thoát khỏi ____ 14! Nó thoát khỏis.replace['"', '\\"'] 'a string with \\"double\\" quotes'
5 thay thế!s.replace['"', '\\"'] 'a string with \\"double\\" quotes'
would become
3 which does not escape thes.replace['"', '\\"'] 'a string with \\"double\\" quotes'
4!s.replace['"', '\\"'] 'a string with \\"double\\" quotes'
it escapes the
5 instead!s.replace['"', '\\"'] 'a string with \\"double\\" quotes'
- Ngay cả khi edgecase được thêm vào, những thứ như
6 có thể sẽ gây ra vấn đềs.replace['"', '\\"'] 'a string with \\"double\\" quotes'
- Đây là cách các cuộc tấn công tiêm xảy ra [chuỗi thoát thủ công nói chung là một công việc dễ bị lỗi]
Đây là một giải pháp tốt hơn
def escape_double_quotes[string]:
return string.replace['\\','\\\\'].replace['"',r'\"']
print[escape_double_quotes['Howdy \"']] # Howdy \"
print[escape_double_quotes['Howdy \\"']] # Howdy \\\"
NHƯNG
Điều này không thoát khỏi mọi thứ. Nó chỉ nên đảm bảo rằng các tài khoản kép luôn được thoát ra.
Để thoát khỏi mọi thứ cho Python, hãy thử sử dụng
s.replace['"', '\\"']
'a string with \\"double\\" quotes'
7. Nhưng một lần nữa, lưu ý "trốn thoát" phụ thuộc vào người đang đọc. Phương pháp này sẽ không an toàn cho các truy vấn cơ sở dữ liệu hoặc đổ vào các trang web.import json
def escape_double_quotes[string]:
return json.dumps[string][1:-1]
print[escape_double_quotes['Howdy \"']]] # Howdy \"
print[escape_double_quotes['Howdy \\"']] # Howdy \\\"
print[escape_double_quotes['Howdy \n \"']] # Howdy \n \"
Đã trả lời ngày 29 tháng 6 lúc 13:29Jun 29 at 13:29
Jeff Hykinjeff HykinJeff Hykin
1.37913 Huy hiệu bạc24 Huy hiệu đồng13 silver badges24 bronze badges