Python字符串和正則表達(dá)式中的反斜杠('\')問題詳解
在Python普通字符串中
在Python中,我們用'\'來轉(zhuǎn)義某些普通字符,使其成為特殊字符,比如
In [1]: print('abc\ndef') # '\n'具有換行的作用 abc defg In [2]: print('abc\tdef') # '\t'具有制位符的作用 abc defg
我們還可以用'\'來轉(zhuǎn)義特殊字符,使其成為普通字符,比如
In [3]: print('abc\\tdef') # 使'\'成為一個(gè)普通的字符,沒有轉(zhuǎn)義作用 abc\tdef In [4]: print('abc\'tdef') # 使'''成為一個(gè)普通的字符,不再需要和另一半單引號'''配對 abc'tde
所以,在python普通字符串中,我們不能以奇數(shù)個(gè)'\'結(jié)尾,這樣會(huì)導(dǎo)致結(jié)束的的引號轉(zhuǎn)義成一個(gè)純字符,從而使得這段字符串沒有引號來結(jié)束。
在Python原生字符串中
我們在字符串前加一個(gè)'r'來表示原生字符串,比如r'abc'。原生字符串中的特殊字符的特殊含義將會(huì)被剝奪掉,如下
In [5]: print(r'abc\ndefg') # '\n'沒有換行的作用,僅僅是一個(gè)普通的字符串 abc\ndefg In [6]: print(r'abc\tdefg') # '\t'沒有制位符的作用,僅僅是一個(gè)普通的字符串 abc\tdef
這里有一個(gè)奇怪的問題,在原生字符串中,雖然'\'成為了一個(gè)普通的字符串,但我們同樣不能以奇數(shù)個(gè)'\'字符串結(jié)尾,這是因?yàn)镻ython正則表達(dá)式的原因,在正則表達(dá)式中我們將會(huì)解釋這個(gè)問題。
在Python(regular express)正則表達(dá)式中
Python正則表達(dá)式中會(huì)有一些不同,正則表達(dá)式中指定了一些元字符(metacharacter),如下
. ^ $ * + ? { } [ ] \ | ( )
它們都具有特殊的含義,'\'也屬于元字符。'\'既屬于Python中的特殊字符,也屬于正則中的元字符,所以使用時(shí)得非常小心。那么在正則中,'\'的作用是什么呢?我們看一個(gè)例子
In [7]: re.search('.', 'sd.f') Out[7]: <_sre.SRE_Match object; span=(0, 1), match='s'> In [8]: re.search('\.', 'sd.f') Out[8]: <_sre.SRE_Match object; span=(2, 3), match='.'>In [9]: re.search('\n', 'sdfd\nfds') Out[9]: <_sre.SRE_Match object; span=(4, 5), match='\n'> """ '.'作為一個(gè)元字符,它的特殊含義是匹配任意一個(gè)字符,而當(dāng)我們在其前面加'\'后,它的特殊含義消失了,匹配到的是'.';而且'\'依然可以把Python中某些字符轉(zhuǎn)義成特殊字符。 """
所以,'\'的作用是剝奪元字符的特殊含義,使其成為一個(gè)Python字符,所以它還是會(huì)具有在Python普通字符串中的轉(zhuǎn)義作用,比如'\n'依然表示換行。所以,'\'既是正則中的一個(gè)元字符,又是Python中的一個(gè)特殊字符。那么我們該如何匹配到純字符'\'(無任何特殊意義)?
在正則中,'\'的作用是把元字符轉(zhuǎn)義成Python字符串文字(a Python string literal),所以正則中的'\\'其實(shí)是其實(shí)是Python字符中的'\',它仍然還具有轉(zhuǎn)義作用,所以在正則中我們還得對每個(gè)'\'再進(jìn)行轉(zhuǎn)義一次,即'\\\\',這樣就可以匹配到純字符'\'了??聪旅胬?/p>
In [10]: re.search('\\\\', 'fsd\nfds') # 目標(biāo)字符串中沒有純字符'\',所以匹配為空 In [11]: re.search('\\\\', 'fsd\\nfds') Out[11]: <_sre.SRE_Match object; span=(3, 4), match='\\'> # Python字符串中,'\\'就是純字符'\'
在re中反復(fù)的使用'\',這可能會(huì)生成大量的連續(xù)的反斜杠,從而導(dǎo)致某些字符串難以理解。解決的辦法是用Python原生字符串來書寫正則表達(dá)式,如下
In [12]: re.search(r'\\', 'fsd\\nfds') # 兩個(gè)'\\'就可以匹配到純字符'\' Out[12]: <_sre.SRE_Match object; span=(3, 4), match='\\'>
另外,當(dāng)我們用原生字符串來書寫正則表達(dá)式時(shí),Python字符中的特殊字符依然有效,比如
In [13]: re.search(r'\n', 'fsd\nfds') Out[13]: <_sre.SRE_Match object; span=(3, 4), match='\n'> """ 在Python字符中,r'\n'僅僅表示純字符串'\n',沒有換行的作用;在正則中,r'\n'依然還有換行的作用。所以此時(shí)我們不能用奇數(shù)個(gè)'\'來結(jié)尾某個(gè)正則表達(dá)式,這樣導(dǎo)致結(jié)束的引號被轉(zhuǎn)義成一個(gè)純字符,無結(jié)束符號。所以,在Python原生字符串中,我們也同樣規(guī)定不能用奇數(shù)個(gè)'\'來結(jié)尾。 """
以上就是本次介紹的全部知識點(diǎn)內(nèi)容,感謝大家對腳本之家的支持。
- python中路徑字符串斜杠替換方式
- python指定路徑斜杠與反斜杠遇到的問題
- python中的正斜杠與反斜杠實(shí)例驗(yàn)證
- python使用正則表達(dá)式匹配反斜杠\遇到的問題
- 一篇文章搞懂Python反斜杠的相關(guān)問題
- python正則表達(dá)式 匹配反斜杠的操作方法
- python如何輸出反斜杠
- Python中正反斜杠(‘/’和‘\’)的意義與用法
- python中的反斜杠問題深入講解
- 解決Python正則表達(dá)式匹配反斜杠''''\''''問題
- Python3.6-MySql中插入文件路徑,丟失反斜杠的解決方法
- 一文詳細(xì)介紹Python兩條斜杠 // 的作用和用法
相關(guān)文章
python實(shí)現(xiàn)控制電腦鼠標(biāo)和鍵盤,登錄QQ的方法示例
這篇文章主要介紹了python實(shí)現(xiàn)控制電腦鼠標(biāo)和鍵盤,登錄QQ的方法,涉及Python基于Button,Controller,Key模塊針對鍵盤、鼠標(biāo)的控制相關(guān)操作技巧,需要的朋友可以參考下2019-07-07一文詳解Python中Reduce函數(shù)輕松解決復(fù)雜數(shù)據(jù)聚合
這篇文章主要為大家介紹了Python中Reduce函數(shù)輕松解決復(fù)雜數(shù)據(jù)聚合示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Python實(shí)戰(zhàn)之實(shí)現(xiàn)截圖識別文字
本文主要介紹了通過python實(shí)現(xiàn)截圖識別圖中文字的功能,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以學(xué)習(xí)一下2021-11-11python 調(diào)用HBase的簡單實(shí)例
下面小編就為大家?guī)硪黄猵ython 調(diào)用HBase的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12pyppeteer執(zhí)行js繞過webdriver監(jiān)測方法下
這篇文章主要為大家介紹了pyppeteer上執(zhí)行js并繞過webdriver監(jiān)測常見方法的上篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04