Hướng dẫn python end string with backslash - chuỗi cuối python có dấu gạch chéo ngược

Chuỗi thô ngây thơ

Ý tưởng ngây thơ của một chuỗi thô là

Nếu tôi đặt một R trước một cặp trích dẫn, tôi có thể đặt bất cứ điều gì tôi muốn giữa các trích dẫn và nó sẽ có nghĩa là chính nó.

Thật không may, điều này không hoạt động, bởi vì nếu bất cứ điều gì xảy ra có chứa báo giá, chuỗi thô sẽ kết thúc vào thời điểm đó.

Đơn giản là không thể mà tôi có thể đặt "bất cứ điều gì tôi muốn" giữa các trình phân cách cố định, bởi vì một số trong đó có thể trông giống như dấu phân cách chấm dứt - bất kể dấu phân cách đó là gì.

Chuỗi thô trong thế giới thực (biến thể 1)

Một cách tiếp cận có thể cho vấn đề này sẽ là nói

Nếu tôi đặt một R trước một cặp trích dẫn, tôi có thể đặt bất cứ điều gì tôi muốn giữa các trích dẫn miễn là nó không chứa một trích dẫn và nó sẽ có nghĩa là chính nó.as long as it does not contain a quote and it will mean itself.

Hạn chế này nghe có vẻ khắc nghiệt, cho đến khi người ta nhận ra rằng việc cung cấp các trích dẫn lớn của Python có thể phù hợp với hầu hết các tình huống với quy tắc này. Sau đây là tất cả các trích dẫn Python hợp lệ:

'
"
'''
"""

Với nhiều khả năng này cho dấu phân cách, hầu hết mọi thứ đều có thể được thực hiện để làm việc. Về ngoại lệ duy nhất là nếu chuỗi theo nghĩa đen được cho là chứa một danh sách đầy đủ của tất cả các trích dẫn Python được phép.

Chuỗi thô trong thế giới thực (biến thể 2, như trong Python)

Python, tuy nhiên, có một tuyến đường khác bằng cách sử dụng một phiên bản mở rộng của quy tắc trên. Nó có hiệu quả

Nếu tôi đặt một R trước một cặp trích dẫn, tôi có thể đặt bất cứ điều gì tôi muốn giữa các trích dẫn miễn là nó không chứa một trích dẫn và nó sẽ có nghĩa là chính nó. Nếu tôi khăng khăng bao gồm một báo giá, thậm chí điều đó được cho phép, nhưng tôi phải đặt một dấu gạch chéo ngược trước đó.If I insist on including a quote, even that is allowed, but I have to put a backslash before it.

Vì vậy, cách tiếp cận Python, theo một nghĩa nào đó, thậm chí tự do hơn cả biến thể 1 ở trên - nhưng nó có tác dụng phụ của "Mis" giải thích trích dẫn đóng như một phần của chuỗi nếu ký tự dự định cuối cùng của chuỗi là dấu gạch chéo ngược.

Biến thể 2 không hữu ích:

  • Nếu tôi muốn báo giá trong chuỗi của mình, nhưng không phải là dấu gạch chéo ngược, phiên bản cho phép của chuỗi theo nghĩa đen của tôi sẽ không phải là thứ tôi cần. Tuy nhiên, với ba loại trích dẫn khác mà tôi có theo ý của mình, có lẽ tôi sẽ chỉ chọn một trong số đó và vấn đề của tôi sẽ được giải quyết - vì vậy đây không phải là trường hợp có vấn đề.
    However, given the three different other kinds of quotes I have at my disposal, I will probably just pick one of those and my problem will be solved -- so this is not problematic case.
  • Trường hợp có vấn đề là một trường hợp này: nếu tôi muốn chuỗi của mình kết thúc bằng một dấu gạch chéo ngược, tôi sẽ bị mất. Tôi cần phải dùng đến việc kết hợp một chuỗi không phải là raw theo nghĩa đen có chứa dấu gạch chéo ngược.

Sự kết luận

Sau khi viết bài này, tôi đi với một số áp phích khác mà biến thể 1 sẽ dễ hiểu hơn và chấp nhận và do đó có nhiều pythonic hơn. Đó là cuộc sống!

2017-08-08 & NBSP; 13: 24: 31

R.David.Murray2017-08-08 00:50 by gregory.p.smith, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Nosy: + R.David.MurrayMessages: + MSG299918
2017-08-08 & NBSP; 02: 28: 28Tác giả: Gregory P. Smith (Gregory.p.smith) **
Hướng dẫn python end string with backslash - chuỗi cuối python có dấu gạch chéo ngược
Ngày: 2017-08-08 15:39
If i could stop thinking of r as meaning "raw" as we document it and instead "regular expression literal" I wouldn't make this mistake. :)

Thanks everyone!
MSG336174 - (Xem)Tác giả: Graham Wideman (Gwideman)*
Hướng dẫn python end string with backslash - chuỗi cuối python có dấu gạch chéo ngược
Ngày: 2019-02-21 02:23
________số 8
MSG336175 - (Xem)Ngày: 2019-02-21 02:29*
Hướng dẫn python end string with backslash - chuỗi cuối python có dấu gạch chéo ngược
Demonstration:
print("x" + r' \' ' + "x")   produces
x \' x
Where is this behavior _ever_ useful? 
Or if there is some use case for this, how frequent is it compared to the frequency of users expecting either that backslash does nothing special, or that it would behave like an escape, and not appear in the output? 

I'm not here to suggest there's some easy fix for this. I just don't want this issue closing as "not a bug" and fail to register that this design is flawed.
Lịch sử
NgàyTác giả: Gregory P. Smith (Gregory.p.smith) **
Hướng dẫn python end string with backslash - chuỗi cuối python có dấu gạch chéo ngược
Ngày: 2017-08-08 15:39
This may well be a "not a bug" resolution to preserve existing semantics that weren't what I expected.
MSG299893 - (Xem)Tác giả: Tim Peters (Tim.Peter) **
Hướng dẫn python end string with backslash - chuỗi cuối python có dấu gạch chéo ngược
Ngày: 2017-08-08 02:28
Yes, I'm closing as not-a-bug.  It's been this way (and documented) forever.  More specifically, as the docs say, a raw string can't end with an _odd_ number of backslashes:

"""
String quotes can be escaped with a backslash, but the backslash remains in the string; for example, r"\"" is a valid string literal consisting of two characters: a backslash and a double quote; r"\" is not a valid string literal (even a raw string cannot end in an odd number of backslashes). Specifically, a raw string cannot end in a single backslash (since the backslash would escape the following quote character).
"""
MSG299918 - (Xem)Tác giả: R. David Murray (R.David.Murray) **
Hướng dẫn python end string with backslash - chuỗi cuối python có dấu gạch chéo ngược
Ngày: 2017-08-08 13:24
In fact, this ia a FAQ: 

https://docs.python.org/3/faq/design.html#why-can-t-raw-strings-r-strings-end-with-a-backslash
MSG299934 - (Xem)Tác giả: Gregory P. Smith (Gregory.p.smith) **
Hướng dẫn python end string with backslash - chuỗi cuối python có dấu gạch chéo ngược
Ngày: 2017-08-08 15:39
If i could stop thinking of r as meaning "raw" as we document it and instead "regular expression literal" I wouldn't make this mistake. :)

Thanks everyone!
MSG336174 - (Xem)Tác giả: Graham Wideman (Gwideman)Ngày: 2019-02-21 02:23
________số 8
MSG336175 - (Xem)Tác giả: Graham Wideman (Gwideman)Ngày: 2019-02-21 02:23
________số 8
MSG336175 - (Xem)
Ngày: 2019-02-21 02:29
Demonstration:
print("x" + r' \' ' + "x")   produces
x \' x
Where is this behavior _ever_ useful? 
Or if there is some use case for this, how frequent is it compared to the frequency of users expecting either that backslash does nothing special, or that it would behave like an escape, and not appear in the output? 

I'm not here to suggest there's some easy fix for this. I just don't want this issue closing as "not a bug" and fail to register that this design is flawed.
Lịch sửNgày
Người sử dụngHoạt độngArgs2022-04-11 & NBSP; 14: 58: 49
quản trị viênbộArgs2022-04-11 & NBSP; 14: 58: 49
quản trị viênbộArgs2022-04-11 & NBSP; 14: 58: 49
messages: + msg336174
quản trị viênbộArgs2022-04-11 & NBSP; 14: 58: 49
quản trị viênbộArgs2022-04-11 & NBSP; 14: 58: 49
messages: + msg299918
quản trị viênbộArgs2022-04-11 & NBSP; 14: 58: 49

quản trị viên
messages: + msg299893

bộ
stage: resolved

GitHub: 75319bộArgs2022-04-11 & NBSP; 14: 58: 49
quản trị viênbộArgs2022-04-11 & NBSP; 14: 58: 49
messages: + msg299889
quản trị viênbộArgs2022-04-11 & NBSP; 14: 58: 49
messages: + msg299885
quản trị viênbộArgs2022-04-11 & NBSP; 14: 58: 49
quản trị viênbộGitHub: 75319

Làm thế nào để bạn kết thúc một chuỗi với một dấu gạch chéo ngược trong Python?

Đó là, r "... \" không phải là một chuỗi hợp lệ theo nghĩa đen, một chuỗi thô không thể kết thúc trong một số lượng ngược các dấu gạch chéo ngược. Nếu bạn cần kết thúc một chuỗi thô với một dấu gạch chéo ngược, bạn có thể sử dụng hai và cắt bỏ thứ hai.use two and slice off the second.

Tại sao Python thêm dấu gạch chéo ngược vào chuỗi?

Trong các chuỗi Python, dấu gạch chéo ngược "\" là một nhân vật đặc biệt, còn được gọi là nhân vật "Escape". Nó được sử dụng để thể hiện các ký tự khoảng trắng nhất định: "\ t" là một tab, "\ n" là một dòng mới và "\ r" là một sự trở lại vận chuyển. Ngược lại, tiền tố một ký tự đặc biệt với "\" biến nó thành một ký tự thông thường.used in representing certain whitespace characters: "\t" is a tab, "\n" is a newline, and "\r" is a carriage return. Conversely, prefixing a special character with "\" turns it into an ordinary character.

Làm thế nào để bạn thoát khỏi một chuỗi trong Python?

Trình tự thoát trong Python bằng cách sử dụng các chuỗi trong các chuỗi Python, dấu gạch chéo ngược là một nhân vật đặc biệt, còn được gọi là nhân vật Escape Escape.Nó được sử dụng để đại diện cho một số ký tự khoảng trắng nhất định: \ \ t, là một tab, \ n, là một dòng mới và là \ r, là một sự trở lại vận chuyển.

Làm thế nào bạn có thể đặt một ký tự dấu gạch chéo ngược trong một chuỗi?

Nếu bạn muốn bao gồm một ký tự dấu gạch chéo ngược, bạn cần hai dấu gạch chéo ngược hoặc sử dụng chuỗi @ nguyên văn: var s = "\\ nhiệm vụ";// hoặc var s = @"\ nhiệm vụ";Đọc tài liệu MSDN/C# Thông số kỹ thuật thảo luận về các ký tự được thoát ra bằng ký tự dấu gạch chéo ngược và việc sử dụng chuỗi nguyên văn theo nghĩa đen.you need two backslashes or use the @ verbatim string: var s = "\\Tasks"; // or var s = @"\Tasks"; Read the MSDN documentation/C# Specification which discusses the characters that are escaped using the backslash character and the use of the verbatim string literal.