Cách bao gồm một trích dẫn trong một chuỗi Python thô


88

Xem xét:

>>> r"what"ever"
SyntaxError: invalid syntax
>>> r"what\"ever"
'what\\"ever'

Vì vậy, làm thế nào để chúng ta có được báo giá, nhưng không phải là dấu gạch chéo?

Và vui lòng không đề xuất r'what"ever', bởi vì sau đó câu hỏi chỉ trở thành làm thế nào để chúng ta bao gồm cả hai loại dấu ngoặc kép?

Có liên quan


Trong trường hợp sử dụng thúc đẩy cho các chuỗi thô (regex và các trường hợp khác mà thứ gì đó không phải Python diễn giải dấu gạch chéo ngược), dấu gạch chéo ngược là tốt, vì nó sẽ được xử lý bởi công cụ regex / bất kỳ công cụ nào. Điều này không áp dụng cho tất cả các trường hợp mà bạn có thể muốn sử dụng chuỗi thô, nhưng hãy đảm bảo suy nghĩ xem nó có áp dụng cho trường hợp sử dụng của bạn hay không trước khi bạn cố gắng loại bỏ dấu gạch chéo ngược.
user2357112 hỗ trợ Monica

Câu trả lời:


146

Nếu bạn muốn sử dụng dấu ngoặc kép trong chuỗi chứ không phải dấu nháy đơn, bạn chỉ có thể sử dụng dấu nháy đơn làm dấu phân cách thay thế:

r'what"ever'

Nếu bạn cần cả hai loại dấu ngoặc kép trong chuỗi của mình, hãy sử dụng chuỗi ba dấu ngoặc kép:

r"""what"ev'er"""

Nếu bạn muốn bao gồm cả hai loại chuỗi được trích dẫn ba lần trong chuỗi của mình (một trường hợp cực kỳ khó xảy ra), bạn không thể làm điều đó và bạn sẽ phải sử dụng chuỗi không phải là nguyên với các lối thoát.


1
Thông minh. Tôi mất một giây để nhận ra rằng tôi cũng có thể tạo chuỗi ba dấu ngoặc kép thô.
mpen

3
Tôi cũng thích đoạn cuối cùng ... đây chính xác là những gì tôi đang cố gắng tìm ra. Những hạn chế của các phong cách trích dẫn khác nhau. Tôi đang so sánh Python r"raw string"và C # @"@-quoted string""""triple quotes"""
mpen

2
Python newb ở đây, hơi nhầm lẫn, không phải r'what"ever"là lỗi phân tích cú pháp sao? Ý bạn là r'what"ever'?
nmr

1
Có gì sai với các nhà phát triển Python? Tại sao họ không đơn giản triển khai một hệ thống thoát như mọi ngôn ngữ khác làm?
Jamby

6
@Jamby Họ có một hệ thống thoát, bạn chỉ cần sử dụng nó với chuỗi không phải raw (chuỗi không có chữ r ở phía trước) và nó hoạt động giống như mọi ngôn ngữ khác .
Coburn

10

Python có nhiều cách để thực hiện chuỗi. Cú pháp chuỗi sau sẽ cho phép bạn sử dụng dấu ngoặc kép:

'''what"ever'''

Bạn đã bỏ lỡ phần thô của câu hỏi.
mpen

10

Nếu bạn cần bất kỳ loại trích dẫn nào (đơn, đôi và ba cho cả hai), bạn có thể "kết hợp" (0) các chuỗi:

>>> raw_string_with_quotes = r'double"' r"single'" r'''double triple""" ''' r"""single triple''' """
>>> print raw_string_with_quotes
double"single'double triple""" single triple'''

Bạn cũng có thể "kết hợp" (0) chuỗi thô với chuỗi không phải là chuỗi thô:

>>> r'raw_string\n' 'non-raw string\n'
'raw_string\\nnon-raw string\n'

(0): Trên thực tế, trình phân tích cú pháp Python tham gia các chuỗi và nó không tạo nhiều chuỗi. Nếu bạn thêm toán tử "+", thì nhiều chuỗi sẽ được tạo và kết hợp.


5

Đừng bận tâm, câu trả lời là các chuỗi được trích dẫn ba lần:

r"""what"ever"""

3

Vì tôi đã vấp phải câu trả lời này và nó đã giúp tôi rất nhiều, nhưng tôi phát hiện ra một vấn đề nhỏ về cú pháp, tôi cảm thấy mình nên cứu những người khác có thể thất vọng. Chuỗi được trích dẫn ba hoạt động cho trường hợp này như được mô tả, nhưng lưu ý rằng nếu "bạn muốn trong chuỗi xuất hiện ở cuối chuỗi:

somestr = """This is a string with a special need to have a " in it at the end""""

Bạn sẽ gặp lỗi khi thực thi vì dấu ngoặc kép "" "" (4) trong một hàng gây nhầm lẫn cho trình đọc chuỗi, vì nó nghĩ rằng nó đã chạm đến cuối chuỗi và sau đó tìm thấy một "ngẫu nhiên" ở đó. Bạn có thể xác thực điều này bằng cách chèn một khoảng trắng vào 4 dấu ngoặc kép như sau: "" "" và nó sẽ không có lỗi.

Trong trường hợp đặc biệt này, bạn sẽ cần sử dụng:

somestr = 'This.....at the end"'

hoặc sử dụng phương pháp được mô tả ở trên để xây dựng nhiều chuỗi với hỗn hợp "và 'và sau đó nối chúng sau thực tế.


1

Chỉ để bao gồm chức năng tương thích Python f String mới:

var_a = 10

f"""This is my quoted variable: "{var_a}". """

f-string hỗ trợ thoát mặc dù, phải không? Vì vậy, bạn có thể làm f"foo\"bar".
mpen

-3

Sử dụng:

dqote='"'
sqote="'"

Sử dụng toán tử '+' và dqotesquotecác biến để nhận được những gì bạn cần.

Nếu tôi muốn sed -e s/",u'"/",'"/g -e s/^"u'"/"'"/, bạn có thể thử những cách sau:

dqote='"'
sqote="'"
cmd1="sed -e s/" + dqote + ",u'" + dqote + "/" + dqote + ",'" + dqote + '/g -e s/^"u' + sqote + dqote + '/' + dqote + sqote + dqote + '/'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.