日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python字符串和正则表达式中的反斜杠(‘\‘)问题

發布時間:2025/3/20 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python字符串和正则表达式中的反斜杠(‘\‘)问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Python普通字符串中

在Python中,我們用’'來轉義某些普通字符,使其成為特殊字符,比如

In [1]: print('abc\ndef') # '\n'具有換行的作用 abc defgIn [2]: print('abc\tdef') # '\t'具有制位符的作用 abc defg

我們還可以用’'來轉義特殊字符,使其成為普通字符,比如

In [3]: print('abc\\tdef') # 使'\'成為一個普通的字符,沒有轉義作用 abc\tdefIn [4]: print('abc\'tdef') # 使'''成為一個普通的字符,不再需要和另一半單引號'''配對 abc'tde

所以,在python普通字符串中,我們不能以奇數個’'結尾,這樣會導致結束的的引號轉義成一個純字符,從而使得這段字符串沒有引號來結束。

在Python原生字符串中

我們在字符串前加一個’r’來表示原生字符串,比如r’abc’。原生字符串中的特殊字符的特殊含義將會被剝奪掉,如下

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' In [5]: print(r'abc\ndefg') # '\n'沒有換行的作用,僅僅是一個普通的字符串 abc\ndefgIn [6]: print(r'abc\tdefg') # '\t'沒有制位符的作用,僅僅是一個普通的字符串 abc\tdef

這里有一個奇怪的問題,在原生字符串中,雖然’‘成為了一個普通的字符串,但我們同樣不能以奇數個’'字符串結尾,這是因為Python正則表達式的原因,在正則表達式中我們將會解釋這個問題。

在Python(regular express)正則表達式中

Python正則表達式中會有一些不同,正則表達式中指定了一些元字符(metacharacter),如下. ^ $ * + ? { } [ ] \ | ( )
它們都具有特殊的含義,’‘也屬于元字符。’‘既屬于Python中的特殊字符,也屬于正則中的元字符,所以使用時得非常小心。那么在正則中,’'的作用是什么呢?我們看一個例子

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'>""" '.'作為一個元字符,它的特殊含義是匹配任意一個字符, 而當我們在其前面加'\'后,它的特殊含義消失了,匹配到的是'.'; 而且'\'依然可以把Python中某些字符轉義成特殊字符。 """

所以,’‘的作用是剝奪元字符的特殊含義,使其成為一個Python字符,所以它還是會具有在Python普通字符串中的轉義作用,比如’\n’依然表示換行。所以,’‘既是正則中的一個元字符,又是Python中的一個特殊字符。那么我們該如何匹配到純字符’’(無任何特殊意義)?

在正則中,’‘的作用是把元字符轉義成Python字符串文字(a Python string literal),所以正則中的’\‘其實是其實是Python字符中的’’,它仍然還具有轉義作用,所以在正則中我們還得對每個’‘再進行轉義一次,即’\\’,這樣就可以匹配到純字符’'了。看下面例子

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' In [10]: re.search('\\\\', 'fsd\nfds') # 目標字符串中沒有純字符'\',所以匹配為空In [11]: re.search('\\\\', 'fsd\\nfds') Out[11]: <_sre.SRE_Match object; span=(3, 4), match='\\'> # Python字符串中,'\\'就是純字符'\'

在re中反復的使用’’,這可能會生成大量的連續的反斜杠,從而導致某些字符串難以理解。解決的辦法是用Python原生字符串來書寫正則表達式,如下

In [12]: re.search(r'\\', 'fsd\\nfds') # 兩個'\\'就可以匹配到純字符'\' Out[12]: <_sre.SRE_Match object; span=(3, 4), match='\\'>

另外,當我們用原生字符串來書寫正則表達式時,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'依然還有換行的作用。 所以此時我們不能用奇數個'\'來結尾某個正則表達式,這樣導致結束的引號被轉義成一個純字符,無結束符號。 所以,在Python原生字符串中,我們也同樣規定不能用奇數個'\'來結尾。 """

總結

以上是生活随笔為你收集整理的Python字符串和正则表达式中的反斜杠(‘\‘)问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。