1 轉義字符的使用
在需要在字符中使用特殊字符時,python用反斜槓(\)轉義字符。如下表:
有時我們並不想讓轉義字符生效,我們只想顯示字符串原來的意思,這就要用r和R來定義原始字符串(raw string).如:
print r'\t\r'
實際輸出爲“\t\r”。
轉義字符 | 描述 |
---|---|
\(在行尾時) | 續行符 |
\\ | 反斜槓符號 |
\' | 單引號 |
\" | 雙引號 |
\a | 響鈴 |
\b | 退格(Backspace) |
\e | 轉義 |
\000 | 空 |
\n | 換行 |
\v | 縱向製表符 |
\t | 橫向製表符 |
\r | 回車 |
\f | 換頁 |
\oyy | 八進制數yy代表的字符,例如:\o12代表換行 |
\xyy | 十進制數yy代表的字符,例如:\x0a代表換行 |
\other | 其它的字符以普通格式輸出 |
python實際使用中,是這樣的:
>>> s
'\\'
>>> print s
\
File "<string>", line 1
path = r"C:\mydir\mysubdir\"
^
SyntaxError: EOL while scanning single-quoted strin
答案是:raw string本來就不是爲了方便寫Windows路徑而設計的,而是爲了方便寫正則表達式設計的。在正則表達式中,反斜槓是轉義字符,因此不可能出現以反斜槓結尾的正則表達式。
Windows路徑的“正統”寫法應該是:
path = os.path.normcase("c:/mydir/mysubdir/")
os.path.normcase在Windows平臺下會自動把正斜槓轉換成反斜槓。
由於正則表達式使用反斜槓來轉義特殊字符,而python自身處理字符串時,反斜槓也是用於轉義字符,這樣就產生了一個雙重轉換的問題,要匹配字符串中1 個反斜槓應該怎麼寫正則表達式?"\\",這樣行嗎?試試就知道了,re模塊拋異常了,因爲"\\"就是一個反斜槓,對於正則表達式解析器來說,是一個轉 義字符,但是後面啥也沒有,自然就報錯了,"\\\"三個肯定是不行的,試試四個"\\\\",完美匹配。
import re
re_str_patt = "\\\\"
reObj = re.compile(re_str_patt)
str_test = "abc\\cd\\hh"
print reObj.findall(str_test)
import re
re_str_patt = "\\\\"
reObj = re.compile(re_str_patt)
str_test = "abc\\cd\\hh"
print reObj.findall(str_test)
import re
re_str_patt = "\\\\d\\+"
print re_str_patt
reObj = re.compile(re_str_patt)
print reObj.findall("\\d+")
import re
re_str_patt = "\\\\d\\+"
print re_str_patt
reObj = re.compile(re_str_patt)
print reObj.findall("\\d+")