詳解python Regex re.sub & re.subn

來源:互聯網
上載者:User
Regex一個比較常見的用途是找到所有模式比對的字串並用不同的字串來替換它們。sub方法提供一個替換值,可以是字串或函數,和一個要被處理的字串。本文主要介紹了python Regex re.sub & re.subn,需要的朋友可以參考下,希望能協助到大家。

pythonRegex模組簡介

Python 自1.5版本起增加了re 模組,它提供 Perl 風格的Regex模式。Python 1.5之前版本則是通過 regex 模組提供 Emacs 風格的模式。Emacs 風格模式可讀性稍差些,而且功能也不強,因此編寫新代碼時盡量不要再使用 regex 模組,當然偶爾你還是可能在老代碼裡發現其蹤影。

就其本質而言,Regex(或 RE)是一種小型的、高度專業化的程式設計語言,(在Python中)它內嵌在Python中,並通過 re 模組實現。使用這個小型語言,你可以為想要匹配的相應字串集指定規則;該字串集可能包含英文語句、e-mail地址、TeX命令或任何你想搞定的東西。然後你可以問諸如“這個字串匹配該模式嗎?”或“在這個字串中是否有部分匹配該模式呢?”。你也可以使用 RE 以各種方式來修改或分割字串。

Regex模式被編譯成一系列的位元組碼,然後由用 C 編寫的匹配引擎執行。在進階用法中,也許還要仔細留意引擎是如何執行給定 RE ,如何以特定方式編寫 RE 以令生產的位元組碼運行速度更快。本文並不涉及最佳化,因為那要求你已充分掌握了匹配引擎的內部機制。

Regex語言相對小型和受限(功能有限),因此並非所有字串處理都能用Regex完成。當然也有些任務可以用Regex完成,不過最終運算式會變得異常複雜。碰到這些情形時,編寫 Python 代碼進行處理可能反而更好;儘管 Python 代碼比一個精巧的Regex要慢些,但它更易理解。

Regex一個比較常見的用途是找到所有模式比對的字串並用不同的字串來替換它們。sub方法提供一個替換值,可以是字串或函數,和一個要被處理的字串。

Grammar:


re.sub(pattern, repl, string[, count])

使用repl替換string中每一個匹配的子串後返回替換後的字串。

當repl是一個字串時,可以使用\id或\g、\g引用分組,但不能使用編號0。

當repl是一個方法時,這個方法應當只接受一個參數(Match對象),並返回一個字串用於替換(返回的字串中不能再引用分組)。

count用於指定最多替換次數,不指定時全部替換。


re.subn(pattern, repl, string[, count])

返回 (sub(repl, string[, count]), 替換次數)。

Case:


#coding=utf-8import restr = "https://i.cnb1logs.co2m/Edi3tPosts.asp4x?opt=999"pattern=re.compile(r'(\.)')print '\.     :' ,re.sub(pattern,'-',str)pattern=re.compile(r'\/([^*]+)\/')print '\/([^*]+)\/ :' ,re.sub(pattern,r'<em>\1<em>',str)pattern = re.compile(r'(\w+)(\w+)(\d+)')#先切片測試print re.split(pattern,str)print re.sub(pattern,r'\3 \1',str)#subn統計sub替換次數print re.subn(pattern,r'\3 \1',str)

Output


\.     : https://i-cnb1logs-co2m/Edi3tPosts-asp4x?opt=999\/([^*]+)\/ : https:<em>/i.cnb1logs.co2m<em>Edi3tPosts.asp4x?opt=999['https://i.', 'cn', 'b', '1', 'logs.', 'c', 'o', '2', 'm/', 'Ed', 'i', '3', 'tPosts.', 'as', 'p', '4', 'x?opt=', '9', '9', '9', '']https://i.1 cnlogs.2 cm/3 EdtPosts.4 asx?opt=9 9('https://i.1 cnlogs.2 cm/3 EdtPosts.4 asx?opt=9 9', 5)***Repl Closed***
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.