1. 程式人生 > >python中使用字串前面加r

python中使用字串前面加r

最近在使用python進行讀取的檔案時,總需要在路徑中去除掉一些特殊意義的字元進行轉義

在網上搜了一下,在python中除了可以使用‘\’之外,我們也可以使用r加在所要處理的字元外面

如下所示

path_t =r"D:\worksapce_python\20160426_cp\training"
這樣就不用專門的去處理引號之中的特殊字元了

關於r 的使用做簡單的介紹

在原始字串裡,所有的字元都是直接按照字面的意思來使用,沒有轉義特殊或不能列印的字元。

原始字串的這個特性讓一些工作變得非常的方便,比如正則表示式的建立(詳見文件的 re
模組).正則表示式是一些定義了高階搜尋匹配方式的字串,通常是由代表字元,分組、匹配信
息、變數名、和字元類等的特殊符號組成。正則表示式模組已經包含了足夠用的符號。但當你
必須插入額外的符號來使特殊字元表現的像普通字元的時候,你就陷入了“字元數字”的泥潭!
這時原始字串就會派上用場了. 
除了原始字串符號(引號前面的字母"r")以外,原始字串跟普通字串有著幾乎完全相
同的語法. 
這個'r'可以是小寫也可以是大寫,唯一的要求是必須緊靠在第一個引號前. 
在三個例子的第一個例子裡面,我們需要一個反斜槓加一個'n'來而不是一個換行符.: 

>>> '\n' 
'\n' 
>>> print '\n' 

>>> r'\n' 
'\\n' 
>>> print r'\n' 
\n 

接下來的例子裡,我們打不開我們的 README 檔案了,為什麼?因為'\t'和'\r'被當成
不在我們的檔名中的特殊符號,但它們實際上檔案路徑的中 4 個獨立的字元. 

>>> f = open('C:\windows\temp\readme.txt', 'r') 
Traceback (most recent call last): 
Edit   By Vheavens 
Edit   By Vheavens                               
File "<stdin>", line 1, in ? 
f = open('C:\windows\temp\readme.txt', 'r') 
IOError: [Errno 2] No such file or directory: 'C:\\win- dows\\temp\readme.txt' 
>>> f = open(r'C:\windows\temp\readme.txt', 'r') 
>>> f.readline() 
'Table of Contents (please check timestamps for last update!)\n' 
>>> f.close() 

最後我們要找一對原始的\n 字元而不是換行。為了找到它,我們使用了一個簡單的正則表
達式,它的作用是查詢通常被用來表示空白字元的反斜線-字元對(backslash-character 
pairs)。 

>>> import re 
>>> m = re.search('\\[rtfvn]', r'Hello World!\n') 
>>> if m is not None: m.group() 
... 
>>> m = re.search(r'\\[rtfvn]', r'Hello World!\n') 
>>> if m is not None: m.group() 
... 
'\\n'

'r'在正則表示式中的作用:

核心筆記 : Python 原始字串(raw strings)的用法 
你可能已經看到前面關於原始字串用法的一些例子了。原始字串的產生正是由於有正則表
達式的存在。原因是 ASCII 字元和正則表示式特殊字元間所產生的衝突。比如,特殊符號“\b”在
ASCII 字元中代表退格鍵,但同時“\b”也是一個正則表示式的特殊符號,代表“匹配一個單詞邊界”。
為了讓 RE 編譯器把兩個字元“\b”當成你想要表達的字串,而不是一個退格鍵,你需要用另一個
反斜線對它進行轉義,即可以這樣寫:“\\b”。 
但這樣做會把問題複雜化,特 別是當你的正則表示式字串裡有很多特殊字元時,就更容
易令人困惑了。在第六章,我們曾介紹過原始字串,它經常被用於簡化正則表示式的複雜程度。
事實上,很多 Python 程式設計師在定義正則表示式時都只使用原始字串。 
下面的例子用來說明退格鍵“\b” 和正則表示式“\b”(包含或不包含原始字串)之間的區別: 
>>> m = re.match('\bblow', 'blow') # backspace, no match #退格鍵,沒有匹配 
>>> if m is not None: m.group() 
... 
>>> m = re.match('\\bblow', 'blow') # escaped \, now it works #用\轉義後,現在匹
配了 
>>> if m is not None: m.group() 
... 
'blow' 
>>> m = re.match(r'\bblow', 'blow') # use raw string instead #改用原始字串

'''

說明:上一句第一個引數r'\bblow'中的'\b'這裡表示的是單詞邊界,不過不明白它既然是表示原始字串為什麼不是就表示'\b'這兩個字元 '\' 和 'b' 呢,

這才是最原始的嗎

不過測試的結果確實是被當成單詞邊界了,那又怎樣表示'\b'這兩個字元呢,最原始的哦,

就打比方說我要找'D:\Documents'資料夾下以字母b開頭的檔案,正則表示式應該怎麼寫呢?參考如下:

>>>print '\blow', r'\blow', re.search(r'\\blow', r'\blow').group()

輸出結果為:low \blow \blow

解釋一下,re.search(r'\\blow', r'\blow').group()中第一個引數前兩個字元'\\'轉換為一個'\','b'即為字母'b',因此與原始字元'\blow'匹配

'''
>>> if m is not None: m.group() 
... 
'blow' 
你可能注意到我們在正則表示式裡使用“\d”,沒用原始字串,也沒出現什麼問題。那是因為
ASCII 裡沒有對應的特殊字元,所以正則表達 式編譯器能夠知道你指的是一個十進位制數字。

 ’r'在普通字串中的使用:

原始字串的這個特性讓一些工作變得非常的方便,比如正則表示式的建立(詳見文件的re模組)。正則表示式是一些定義了高階搜尋匹配方式的字串,通常是由代表字元、分組、匹配資訊、變數名和字元類等的特殊符號組成。正則表示式模組已經包含了足夠用的符號。但當你必須插入額外的符號來使特殊字元表現的像普通字元的時候,你就陷入了“字元數字”的泥潭!這時原始字串就會派上用場了。

除了原始字串符號(引號前面的字母“r”)以外,原始字串跟普通字串有著幾乎完全相同的語法。這個'r'可以是小寫也可以是大寫,唯一的要求是必須緊靠在第一個引號前。在3個例子的第1個例子裡面,我們需要一個反斜槓加一個“n”來而不是一個換行符。

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> print 'abc\ndef'
abc
def
>>> print r'abc\ndef'
abc\ndef



相關推薦

Python字串前面'r'的用法

在開啟檔案的時候open(r'c:\....') 加r和不加''r是有區別的 'r'是防止字元轉義的 如果路徑中出現'\t'的話 不加r的話\t就會被轉義 而加了'r'之後'\t'就能保留原有的樣子

python使用字串前面r

最近在使用python進行讀取的檔案時,總需要在路徑中去除掉一些特殊意義的字元進行轉義 在網上搜了一下,在python中除了可以使用‘\’之外,我們也可以使用r加在所要處理的字元外面 如下所示 path_t =r"D:\worksapce_python\20160426_

python字串前面r

在開啟檔案的時候open(r'c:\....') 加r和不加''r是有區別的 'r'是防止字元轉義的 如果路徑中出現'\t'的話 不加r的話\t就會被轉義 而加了'r'之後'\t'就能保留原有的樣子 在字串賦值的時候 前面加'r'可以防止字串在時候的時候不被轉義

Python 字串前面 r

在Python的string前面加上‘r’, 是為了告訴編譯器這個string是個raw string,不要轉意backslash '\' 。 例如,\n 在raw string中,是兩個字元,\和n, 而不會轉意為換行符。由於正則表示式和 \ 會有衝突,因此,當一個字串使

Python 字串前面'r'

在Python的string前面加上‘r’, 是為了告訴編譯器這個string是個raw string,不要轉意backslash '\' 。 例如,\n 在raw string中,是兩個字元,\和n, 而不會轉意為換

python指令碼 字串r u是什麼意思

網上檢視資料: u/U:表示unicode字串 不是僅僅是針對中文, 可以針對任何的字串,代表是對字串進行unicode編碼。 一般英文字元在使用各種編碼下, 基本都可以正常解析, 所以一般不帶u;但是中文, 必須表明所需編碼, 否則一旦編碼轉換就會出現亂碼。 建議所有編碼方式採用utf8 r/R:非轉義

python字串前的r什麼意思

Python中,u表示unicode string,表示使用unicode進行編碼,沒有u表示byte string,型別是str,在沒有宣告編碼方式時,預設ASCI編碼。如果要指定編碼方式,可在檔案頂部加入類似如下程式碼: # -*- coding: utf-8 -*- utf-8是一種支援中文的編

python字串前面u,r,b的含義

u/U:表示unicode字串 不是僅僅是針對中文, 可以針對任何的字串,代表是對字串進行unicode編碼。 一般英文字元在使用各種編碼下, 基本都可以正常解析, 所以一般不帶u;但是中文, 必須

python字串定義前面r

在Python的string前面加上‘r’, 是為了告訴編譯器這個string是個raw string,不要轉意backslash '\' 。 例如,\n 在raw string中,是兩個字元,\和n, 而不會轉意為換

Python3 字串前面u,r,b的含義

u/U:表示unicode字串 不是僅僅是針對中文, 可以針對任何的字串,代表是對字串進行unicode編碼。 一般英文字元在使用各種編碼下, 基本都可以正常解析, 所以一般不帶u;但是中文, 必須表明所需編碼, 否則一旦編碼轉換就會出現亂碼。 建議所有編碼方式採用utf8。在python3中,字串預設為u

Python中文編碼問題(字串前面'u')

中文編碼問題是用中文的程式設計師經常頭大的問題,在python下也是如此,那麼應該怎麼理解和解決python的編碼問題呢? 我們要知道python內部使用的是unicode編碼,而外部卻要面對千奇百怪的各種編碼,比如作為中國程式經常要面對的gbk,gb2312

python 字串r

在Python的string前面加上‘r’, 是為了告訴編譯器這個string是個raw string,不要轉意backslash '\' 。 例如,\n 在raw string中,是兩個字元,\和n, 而不會轉意為換行符。由於正則表示式和 \ 會有衝突,因此,當一個字串使

python字串的操作方法

python中字串的操作方法大全 更新時間:2018年06月03日 10:08:51 作者:駿馬金龍 我要評論這篇文章主要給大家介紹了關於python中字串操作方法的相關資料,文中通過示例程式碼詳細介紹了關於python中字串的大小寫轉換、isXXX判斷、填充、子串搜尋、替換、分割、join以及修剪:st

python字串的操作方法大全

轉自:https://www.jb51.net/article/141376.htm 這篇文章主要給大家介紹了關於python中字串操作方法的相關資料,文中通過示例程式碼詳細介紹了關於python中字串的大小寫轉換、isXXX判斷、填充、子串搜尋、替換、分割、join以及修剪:strip、l

Python字串常用操作

字串常用操作 (1)find 檢測指定字串是否包含在當前字串中,如果是返回開始的索引值,否則返回-1 strs.find(str,start,end) start 為起始位置,end為結束位置 (2)index 作用和find()方法一樣,不過當要查詢的字串不存在時

python字串的幾種表達方式(用什麼方式表示字串

說明:   今天在學習python的基礎的內容,學習在python中如何操作字串,在此記錄下.   主要是python中字串的幾種表達,表示方式。 python的幾種表達方式   1 使用單引號擴起來字串 >>> 'my python lession' #以單引號

Python字串與datetime的相互轉換

1. 字串轉換成datetime物件 from datetime import datetime t = datetime.strptime(append_at, '%Y-%m-%d %H:%M:%S') 結果顯示: <class 'datetime.datetime

Python字串的常見操作

在python中使用“”或者是‘’包裹的資料就是字串,操作方法如下: 切片:切片是指對操作物件擷取一部分的操作,字串,列表,元組都支援切片操作。 語法:[起始:結束:步長] 注意:選取的區間是從起始位開始,到結束位的前一位結束(不包括結束位本身),步長表示選取間隔。 print(str[

Python字串的擷取,列表的擷取

字串的擷取 Python中的字串用單引號 ' 或雙引號 " 括起來,同時使用反斜槓 \ 轉義特殊字元。 字串的擷取的語法格式如下: 變數[頭下標:尾下標]索引值以 0 為開始值,-1 為從末尾的開始位置。 加號 + 是

Python字串的切片

切片的語法:[起始:結束:步長] 注意:     1、選取的區間屬於左閉右開型,即從"起始"位開始,到"結束"位的前一位結束(不包含結束位本身)。     2、沒有下標越界的概念,如結束的值可以遠大於物件的長度,這一點和陣列不一樣。