2011-01-24 13 views
81

Lần đầu tiên tôi thấy nó được sử dụng trong việc xây dựng cụm từ thông dụng trên nhiều dòng dưới dạng đối số phương thức cho re.compile(), vì vậy tôi giả định rằng r là viết tắt của RegEx.Điều gì trước một chuỗi chữ với "r" nghĩa là gì?

Ví dụ:

regex = re.compile(
    r'^[A-Z]' 
    r'[A-Z0-9-]' 
    r'[A-Z]$', re.IGNORECASE 
) 

Vậy r nghĩa trong trường hợp này? Tại sao chúng ta cần nó?

+0

Lưu ý rằng tách các chuỗi trên nhiều dòng trong ngoặc đơn không có gì để làm với các tiền tố nhân vật - đây chỉ là một ví dụ về nối chuỗi tự động của Python, và làm việc với bất kỳ tiền tố hoặc không ai. –

+1

Trước một chuỗi có ký tự như 'r' hoặc 'u' có nghĩa là bạn cần đọc tài liệu. Nghiêm túc. "chơi xung quanh với các nhân vật khác nhau" là điều tồi tệ nhất bạn có thể làm. Bạn sẽ không học nhiều theo cách đó và những gì bạn sẽ học sẽ chậm và khó hiểu. Vui lòng đọc tài liệu. Xin vui lòng. –

+7

Tôi đã thử. Tôi đã nói, "Tôi đang gặp khó khăn khi tìm kiếm tài liệu cho câu trả lời, vì tôi không biết họ được chính thức gọi là gì." - Tôi không có thời gian để thực sự nhìn. Bạn biết đấy, thời hạn và công cụ. : P Tôi chỉ tìm kiếm "tiền tố chuỗi python", và mặc dù kết quả của câu trả lời hàng đầu cho "phân tích Lexical" là kết quả thứ 2, "Phân tích Lexical" đã khiến tôi không đọc được trang được liên kết, vì nó nghe giống như đọc nặng. –

Trả lời

107

r có nghĩa là chuỗi được coi là chuỗi thô, có nghĩa là tất cả các mã thoát sẽ bị bỏ qua.

Đối với một ví dụ:

'\n' sẽ được coi như một ký tự xuống dòng, trong khi r'\n' sẽ được đối xử như những nhân vật \ tiếp theo n.

When an 'r' or 'R' prefix is present, a character following a backslash is included in the string without change, and all backslashes are left in the string. For example, the string literal r"\n" consists of two characters: a backslash and a lowercase 'n' . 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). Note also that a single backslash followed by a newline is interpreted as those two characters as part of the string, not as a line continuation.

Nguồn: Python string literals

+3

_God_ bạn đã lưu cho tôi một sự đau đầu lớn ngay hôm nay. Tôi đã có một vấn đề gây rắc rối cho tôi trong nhiều tuần, chỉ để tìm thấy tôi đã thiếu một 'r' trong các thông số của tôi. Cảm ơn bạn, nghiêm túc. –

+0

dấu gạch chéo ngược \ '\\' không thể là điều lệ cuối cùng hoặc một lỗi khác 'Cú pháp Cú pháp: EOL khi quét chuỗi ký tự' xảy ra. Đối với Python3 nó là 'in (r" Test \ new ")' – Arthur

+0

nội suy chuỗi bằng cách sử dụng '.format()' vẫn hoạt động trên chuỗi thô. [Ví dụ về định dạng] (https://docs.python.org/3.6/library/string.html#format-examples) –

23

Điều đó có nghĩa là các lần thoát sẽ không được dịch. Ví dụ:

r'\n' 

là một chuỗi có dấu gạch chéo ngược theo sau là chữ cái n. (Nếu không có r nó sẽ là một dòng mới.)

b đứng cho chuỗi byte và được sử dụng trong Python 3, trong đó chuỗi là Unicode theo mặc định. Trong chuỗi Python 2.x là chuỗi byte theo mặc định và bạn sẽ sử dụng u để biểu thị Unicode.

+1

Bạn quên điều này: http://docs.python.org/reference/lexical_analysis.html#string-literals –