溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python反斜杠不轉(zhuǎn)義是怎么回事

發(fā)布時(shí)間:2020-09-02 11:20:51 來(lái)源:億速云 閱讀:301 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹python反斜杠不轉(zhuǎn)義是怎么回事,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

python本身使用 \ 來(lái)轉(zhuǎn)義一些特殊字符,比如在字符串中加入引號(hào)的時(shí)候

s = 'i\'m superman'
print(s)    # i'm superman

為了防止和字符串本身的引號(hào)沖突,使用 \ 來(lái)轉(zhuǎn)義,一般情況下這個(gè)也不會(huì)引起什么問(wèn)題,但是當(dāng)你要使用 \ 來(lái)轉(zhuǎn)義 \ 的時(shí)候,就比較混亂了,比如我們想要輸出一個(gè) \ ,得寫(xiě)兩個(gè) \ ,否則會(huì)報(bào)語(yǔ)法錯(cuò)誤,因?yàn)?\ 把后面的引號(hào)給轉(zhuǎn)義了,必須使用 \。

# 錯(cuò)誤寫(xiě)法
# print '\'

# 正確寫(xiě)法
print('\\')     # \

# 原生字符串
print(r'\\')    # \\

將 \ 轉(zhuǎn)義一下使其不具備轉(zhuǎn)義功能,才可以正確輸出,當(dāng)使用原生字符串的時(shí)候,輸出顯示了兩個(gè) \ ,看起來(lái)好像是寫(xiě)幾個(gè)輸出幾個(gè)的樣子,如果這樣想的話,你可以試一下,看能不能輸出奇數(shù)個(gè) \。

python的原生字符串不能以反斜杠結(jié)尾的問(wèn)題

Python的原生字符串(raw string)是個(gè)很有用的東西,可以少寫(xiě)很多反斜線(轉(zhuǎn)義符號(hào))。

不過(guò)它有個(gè)著名的bug,就是不能以反斜線結(jié)尾,這讓人很無(wú)語(yǔ)。首先要澄清的是不是不能以反斜線結(jié)尾,而是不能以奇數(shù)個(gè)反斜線結(jié)尾。

其次,這個(gè)bug的原因是一些處理器(例如主要的正則表達(dá)式引擎)希望進(jìn)行它們自己的反斜線轉(zhuǎn)義處理,而這些處理器不允許字符串以未匹配的反斜線結(jié)尾。

最后,解決辦法就是把反斜線放在另一個(gè)字符串里,Python會(huì)自動(dòng)進(jìn)行合并:

dir = r"\this\is\my\dos\dir" "\\"

雖然原生字符串不是很完美,但是它已經(jīng)可以幫我們解決很大一部分的問(wèn)題了。比如當(dāng)你想匹配"\"的時(shí)候,原生字符串可以讓你至少少寫(xiě)一半的\,即節(jié)省代碼量,又增加了可讀性。

import re
_string = '\\\\'
print(_string)  # \\

# 字符串
for i in re.findall('\\\\', _string):
    print(i)    
    # \
    # \
# 原生字符串
for i in re.findall(r'\\', _string):
    print(i)    
    # \
    # \

以上是python反斜杠不轉(zhuǎn)義是怎么回事的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI