最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 正則表達式(轉義問題)

 更新時間:2014年12月15日 00:01:53   投稿:mdxy-dxy  
這篇文章主要介紹了Python 正則表達式(轉義問題),需要的朋友可以參考下

先說一個比較囧的事情:在寫蝦米音樂試聽下載器的時候遇到一個問題,因為保存的文件都是用音樂的標題命名的,所以碰到一些諸如「対峙/out border」等含有非法字符(哼哼,說的就是你 →_→ Windows)的標題的時候,就會保存失敗。于是我想起了迅雷的解決方法:把所有的非法字符替換成下劃線。

于是就引入了正則表達式的使用。一番搜索囫圇吞棗后,我寫下了這樣的函數(shù):

復制代碼 代碼如下:

def sanitize_filename(filename):
return re.sub('[\/:*?<>|]', '_', filename)

最近意識到了這個函數(shù)里的好多問題:

  • Python 和 Shell 不同,無論單引號還是雙引號,反斜杠都是轉義符。走狗屎運的是,Python 對于沒意義的轉義 \/ 的處理是保持原樣。
  • 即便如此,sanitize_filename('\\/:*?<>|') 依舊返回 \_______ 而不是全部都是下劃線。

于是感覺得正正經(jīng)經(jīng)看看文檔了。

Raw strings

看了文檔后才意識到,Python 正則表達式模塊的轉義是獨立的。例如匹配一個反斜杠字符需要將參數(shù)寫成:'\\\\':

Python 將字符串轉義:\\\\ 被轉義為 \\
re 模塊獲得傳入的 \\ 將其解釋為正則表達式,按照正則表達式的轉義規(guī)則將其轉義為 \
如此麻煩的前提下,Raw String 就大有作為了,顧名思義就是(除了結尾的反斜杠)不會被轉義的字符串。于是匹配一個反斜杠字符就可以寫作 r'\\'。

所以上面的 sanitize_filename 改成了:

復制代碼 代碼如下:

def sanitize_filename(filename):
return re.sub(r'[\\/:*?<>|]', '_', filename)

Regex 和 Match

于是正經(jīng)看看 re 模塊吧~以下為流水帳,供急性子觀看。

Python 的正則表達式模塊 re 中主要的對象其實是這倆:

正則表達式 RegexObject
匹配 MatchObject
RegexObject 是正則表達式對象,所有 match sub 之類的操作都歸它所有。由 re.compile(pattern, flag) 生成。

復制代碼 代碼如下:

>>> email_pattern = re.compile(r'\w+@\w+\.\w+')
>>> email_pattern.findall('My email is abc@def.com and his is user@example.com')
['abc@def.com', 'user@example.com']

其中的方法:

search 從任意字符開始匹配,返回 MatchObject 或者 None
match 從第一個字符開始匹配,返回 MatchObject 或者 None
split 返回由匹配分割的 List
findall 返回所有匹配的 List
finditr 返回 MatchObject 的迭代器
sub 返回替換后的字符串
subn 返回 (替換后的字符串, 替換次數(shù))
re 模塊里提供的函數(shù)如 re.sub re.match re.findall 實際上都可以認為是一種省去直接創(chuàng)建正則表達式對象的捷徑。而由于 RegexObject 對象本身可以反復使用,這也是它相對于這些捷徑函數(shù)的優(yōu)勢所在。

MatchObject 則是匹配對象,表示一次正則表達式匹配的結果。由 RegexObject 的一些方法返回。匹配對象永遠是 True 的,另外還有一大堆用來取得正則表達式中分組(group)相關信息的方法。

復制代碼 代碼如下:

>>> for m in re.finditer(r'(\w+)@\w+\.\w+', 'My email is abc@def.com and his is user@example.com'):
... print '%d-%d %s %s' % (m.start(0), m.end(0), m.group(1), m.group(0))
...
12-23 abc abc@def.com
35-51 user user@example.com

參考

相關文章

  • 使用setup.py安裝python包和卸載python包的方法

    使用setup.py安裝python包和卸載python包的方法

    這篇文章主要介紹了使用setup.py安裝python包和卸載python包的方法,大家參考使用吧
    2013-11-11
  • Pytorch通過保存為ONNX模型轉TensorRT5的實現(xiàn)

    Pytorch通過保存為ONNX模型轉TensorRT5的實現(xiàn)

    這篇文章主要介紹了Pytorch通過保存為ONNX模型轉TensorRT5的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python函數(shù)使用的相關練習題分享

    Python函數(shù)使用的相關練習題分享

    這篇文章主要介紹了Python函數(shù)使用的相關練習題分享,文章基于python函數(shù)內(nèi)容展開其相關例題,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • Python獲取Windows或Linux主機名稱通用函數(shù)分享

    Python獲取Windows或Linux主機名稱通用函數(shù)分享

    這篇文章主要介紹了Python獲取Windows或Linux主機名稱通用函數(shù)分享,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2014-11-11
  • 4行Python代碼生成圖像驗證碼(2種)

    4行Python代碼生成圖像驗證碼(2種)

    這篇文章主要介紹了4行Python代碼生成圖像驗證碼(2種),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • Python讀取實時數(shù)據(jù)流示例

    Python讀取實時數(shù)據(jù)流示例

    今天小編就為大家分享一篇Python讀取實時數(shù)據(jù)流示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python如何用filter函數(shù)篩選數(shù)據(jù)

    Python如何用filter函數(shù)篩選數(shù)據(jù)

    這篇文章主要介紹了Python如何用filter函數(shù)篩選數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • python 根據(jù)csv表頭、列號讀取數(shù)據(jù)的實現(xiàn)

    python 根據(jù)csv表頭、列號讀取數(shù)據(jù)的實現(xiàn)

    這篇文章主要介紹了python 根據(jù)csv表頭、列號讀取數(shù)據(jù)的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python中執(zhí)行shell的兩種方法總結

    python中執(zhí)行shell的兩種方法總結

    這篇文章主要介紹了python中執(zhí)行shell的兩種方法,有兩種方法可以在Python中執(zhí)行SHELL程序,方法一是使用Python的commands包,方法二則是使用subprocess包,這兩個包均是Python現(xiàn)有的內(nèi)置模塊。需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • Python實現(xiàn)將長圖制作成一個視頻

    Python實現(xiàn)將長圖制作成一個視頻

    這篇文章主要為大家詳細介紹了Python如何實現(xiàn)將一個長圖制作成一個視頻,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-05-05

最新評論

宣汉县| 永康市| 耿马| 广宁县| 饶河县| 神农架林区| 澳门| 广宁县| 和林格尔县| 乌什县| 双辽市| 邹平县| 巴东县| 嘉鱼县| 孝昌县| 新郑市| 磐安县| 石城县| 独山县| 夏河县| 巫山县| 安乡县| 老河口市| 民县| 永康市| 内丘县| 通道| 宁明县| 孟津县| 肇东市| 柳林县| 贡山| 南丹县| 青冈县| 乐都县| 荣成市| 天祝| 浦县| 东阳市| 水城县| 密山市|