Bỏ qua (vô hiệu hóa) chuỗi thoát trong Python với chuỗi thô

Kinh doanh

...',"..."Trong Python, nếu bạn đặt trước các ký tự chuỗi này bằng một trong các ký tự sau, giá trị sẽ trở thành một chuỗi mà không cần mở rộng chuỗi thoát.

  • r
  • R

Hữu ích khi xử lý các chuỗi sử dụng nhiều dấu gạch chéo ngược, chẳng hạn như đường dẫn Windows và các mẫu biểu thức chính quy.
Thông tin sau được cung cấp ở đây.

  • trình tự thoát
  • Bỏ qua (vô hiệu hóa) chuỗi thoát trong chuỗi thô
  • Chuyển đổi chuỗi bình thường thành chuỗi thô:repr()
  • Lưu ý dấu gạch chéo ngược ở cuối.

trình tự thoát

Trong Python, các ký tự không thể được biểu diễn trong một chuỗi bình thường (chẳng hạn như tab và dòng mới) được mô tả bằng cách sử dụng trình tự thoát có dấu gạch chéo ngược, tương tự như ngôn ngữ C. Dưới đây là một ví dụ về trình tự thoát.

  • \t
  • \n
s = 'a\tb\nA\tB'
print(s)
# a b
# A B

Bỏ qua (vô hiệu hóa) chuỗi thoát trong chuỗi thô

...',"..."Nếu bạn đặt tiền tố chuỗi như vậy bằng một trong các ký tự sau, giá trị sẽ trở thành chuỗi mà không mở rộng chuỗi thoát. Chuỗi như vậy được gọi là chuỗi thô.

  • r
  • R
rs = r'a\tb\nA\tB'
print(rs)
# a\tb\nA\tB

Không có kiểu đặc biệt nào được gọi là kiểu chuỗi thô, nó chỉ là kiểu chuỗi và bằng với chuỗi bình thường với dấu gạch chéo ngược được biểu diễn như sau
\\

print(type(rs))
# <class 'str'>

print(rs == 'a\\tb\\nA\\tB')
# True

Trong một chuỗi bình thường, một chuỗi thoát được coi là một ký tự, nhưng trong một chuỗi thô, dấu gạch chéo ngược cũng được tính là ký tự. Độ dài của chuỗi và mỗi ký tự như sau.

print(len(s))
# 7

print(list(s))
# ['a', '\t', 'b', '\n', 'A', '\t', 'B']

print(len(rs))
# 10

print(list(rs))
# ['a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B']

Đường dẫn Windows

Sử dụng chuỗi thô rất hữu ích khi bạn muốn biểu diễn đường dẫn Windows dưới dạng chuỗi.

Các đường dẫn Windows được phân tách bằng dấu gạch chéo ngược, vì vậy nếu bạn sử dụng một chuỗi bình thường, bạn phải thoát khỏi đường dẫn như sau, nhưng nếu bạn sử dụng một chuỗi thô, bạn có thể viết nó như vậy. Các giá trị tương đương nhau.
\\

path = 'C:\\Windows\\system32\\cmd.exe'
rpath = r'C:\Windows\system32\cmd.exe'
print(path == rpath)
# True

Lưu ý rằng một chuỗi kết thúc bằng một số lẻ dấu gạch chéo ngược sẽ dẫn đến lỗi, như được mô tả bên dưới. Trong trường hợp này, cần phải viết chuỗi như một chuỗi bình thường hoặc nối nó bằng cách chỉ viết phần cuối của chuỗi như một chuỗi bình thường.

path2 = 'C:\\Windows\\system32\\'
# rpath2 = r'C:\Windows\system32\'
# SyntaxError: EOL while scanning string literal
rpath2 = r'C:\Windows\system32' + '\\'
print(path2 == rpath2)
# True

Chuyển đổi chuỗi bình thường thành chuỗi thô bằng repr ()

Nếu bạn muốn chuyển đổi một chuỗi bình thường thành một chuỗi thô bỏ qua (vô hiệu hóa) các chuỗi thoát, bạn có thể sử dụng hàm repr () tích hợp sẵn.

s_r = repr(s)
print(s_r)
# 'a\tb\nA\tB'

Hàm repr () trả về là một chuỗi đại diện cho một đối tượng sao cho nó có cùng giá trị như khi nó được chuyển đến eval (), với các ký tự đầu và cuối.

print(list(s_r))
# ["'", 'a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B', "'"]

Sử dụng các lát cắt, chúng ta có thể nhận được một chuỗi tương đương với chuỗi thô có đính kèm r.

s_r2 = repr(s)[1:-1]
print(s_r2)
# a\tb\nA\tB

print(s_r2 == rs)
# True

print(r'\t' == repr('\t')[1:-1])
# True

Lưu ý dấu gạch chéo ngược ở cuối.

Vì một dấu gạch chéo ngược thoát khỏi ký tự trích dẫn ngay sau nó, lỗi sẽ xảy ra nếu có một số lẻ dấu gạch chéo ngược ở cuối chuỗi. Số lượng dấu gạch chéo ngược chẵn là OK.

# print(r'\')
# SyntaxError: EOL while scanning string literal

print(r'\\')
# \\

# print(r'\\\')
# SyntaxError: EOL while scanning string literal
Copied title and URL