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

歡迎訪問 生活随笔!

生活随笔

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

python

python与正则表达式(part2)--正则表达式的转义

發布時間:2023/12/19 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python与正则表达式(part2)--正则表达式的转义 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 正則表達式的轉義


正則表達式的轉義

  • 如果使用正則表達式來匹配特殊字符(. * + ? ^ $ [] () {} | ),則需要在特殊符號前加上【\】 表示轉義。

例子1

In : re.findall('-?\d+\.?\d*',"123,-123,1.23,-1.23") Out: ['123', '-123', '1.23', '-1.23']

例子2

In :print(re.findall('\$\d+',"薪資:$100")) Out: ['$100']
  • 在編程語言中,常使用原生字符串書寫正則表達式避免多重轉義的麻煩。

當我們使用re模塊進行匹配時,我們輸入一串python字符串,py先將python字符串解析為正則表達式,再利用正則表達式匹配目標字符串:

python字符串 --解析為-- > 正則表達式 --匹配-- > 目標字符串
\\$\\d+ --解析為-- > \$\d+ --匹配-- > $100

我們解釋一下上面的表格的含義:如果我們用正則表達式匹配$100,那么我們就要將正則表達式,以字符串的形式傳給findall()做參數,那么我們如何寫這個字符串來表達正則表達式呢?在字符串中我們遇到特殊字符(這里的特殊字符,是針對于python來說的特殊字符,比如【\】【\b】等等)也需要進行轉義,所以我們可以用\\$\\d+來表示正則表達式\$\d+。故,其實最正統的例子2中的寫法應該是:

In : print(re.findall('\\$\\d+',"薪資:$100")) Out: ['$100']

那為啥例子2中的寫法也對了呢? 那是因為如果我們寫成【\\$\\d+】,python會先經過字符串的轉義解析,解析為【\$\d+】。而,我們例子2中的寫法【\$\d+】,結果python無法識別。比如,對于【\$】,由于python沒有這么一個特殊字符,py無法識別,所以py就給我們原樣解析了;同時,python也沒有【\d】這么一個特殊字符,所以,py也給我們原樣解析了;而【+】本身就是【+】。所以最后,我們寫成【\$\d+】也能匹配$100.

比如之前一個例子:

In : print(re.findall(r'\bis\b', "This is XiaoHuang")) Out: ['is'] #這里輸出的is,是第二個is(兩邊都有空格的is)

若我們不在字符串前加【r】時,python會得到什么樣的結果呢?

In :print(re.findall('\bis\b', "This is XiaoHuang")) Out: []

嗯!啥都沒有~
這是為啥呢?
那是因為在python字符串中,存在特殊字符【\b】,表示退格。則若輸入【\bis\b】,則python會解析為【退格is退格】,那么后面的字符串就不會被匹配。所以這里我們應該寫成【\\bis\\b】:

In : print(re.findall('\\bis\\b', "This is XiaoHuang")) Out: ['is']

那么現在問題又來了! 如果我們現在想匹配【薪資:$100\200】中的【$100\200】,我們該怎么寫呢???
注意:當我們利用py進行匹配時,被匹配的【薪資:$100\200】也為python字符串,所以在python中應該寫為:【薪資:$100\\200】。
這時,我們的正則表達式應該寫成:【\$\d+\\\d+】,python字符串應該寫成:【\\$\\d+\\\\\\d+】:

In : print(re.findall('\\$\\d+\\\\\\d+',"薪資:$100\\200")) Out: ['$100\\200']

匹配是匹配出來了,但是……WC, 這也太冗雜了。故我們引入了原生字符串。原生字符串是指,在字符串之前加一個【r】,使字符串內部所有可能會發生的轉義,都不發生轉義解析,即避免字符串內的所有轉義解析。比如,在字符串前加了【r】之后,【\】就表示單純的【\】,【\b】就表示單純的【\b】。我們在iPython內驗證一下:

In : r'\n' Out: '\\n'

嗯!perfect!

因此,當我們用了原生字符串后,我們的正則表達式是什么樣的,python字符串內,就可以寫成什么樣~
所以,我們上面的那個例子就可以寫成:

In : print(re.findall(r'\$\d+\\\d+',r"薪資:$100\200")) Out: ['$100\\200']

備注:原生字符串不僅僅在正則表達式中有應用,只要我們想保持原樣的內容,不進行轉義,都可以使用原生字符串。

總結

以上是生活随笔為你收集整理的python与正则表达式(part2)--正则表达式的转义的全部內容,希望文章能夠幫你解決所遇到的問題。

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