国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python正則表達式完全指南

2020-02-16 01:35:16
字體:
來源:轉載
供稿:網友

正則表達式處理文本有如疾風掃秋葉,絕大部分編程語言都內置支持正則表達式,它應用在諸如表單驗證、文本提取、替換等場景。爬蟲系統更是離不開正則表達式,用好正則表達式往往能收到事半功倍的效果。

介紹正則表達式前,先來看一個問題,下面這段文本來自豆瓣的某個網頁鏈接,我對內容進行了縮減。問:如何提取文本中所有郵箱地址呢?

html = """  <style>   .qrcode-app{    display: block;    background: url(/pics/qrcode_app4@2x.png) no-repeat;   }  </style>  <div class="reply-doc content">   <p class="">34613453@qq.com,謝謝了</p>   <p class="">30604259@qq.com麻煩樓主</p>  </div>  <p class="">490010464@163.com<br/>謝謝</p>  """

如果你還沒接觸過正則表達式,我想對此會是一籌莫展,不用正則,似乎想不到一種更好的方式來處理,不過,我們暫且放下這個問題,待學習完正則表達式之后再來考慮如何解決。

字符串的表現形式

Python 字符串有幾種表現形式,以u開頭的字符串稱為Unicode字符串,它不在本文討論范圍內,此外,你應該還看到過這兩種寫法:

>>> foo = "hello">>> bar = r"hello"

前者是常規字符串,后者 r 開頭的是原始字符串,兩者有什么區別?因為在上面的例子中,它們都是由普通文本字符組成的串,在這里沒什么區別,下面可以證明

>>> foo is barTrue>>> foo == barTrue

但是,如果字符串中包括有特殊字符,會是什么情況呢?再來看一個例子:

>>> foo = "/n">>> bar = r"/n">>> foo, len(foo)('/n', 1)>>> bar, len(bar)('//n', 2)>>> foo == barFalse>>>

"/n" 是一個轉義字符,它在 ASCII 中表示換行符。而 r"/n" 是一個原始字符串,原始字符串不對特殊字符進行轉義,它就是你看到的字面意思,由 "/" 和 "n" 兩個字符組成的字符串。

定義原始字符串可以用小寫r或者大寫R開頭,比如 r"/b" 或者 R"/b" 都是允許的。在 Python 中,正則表達式一般用原始字符串的形式來定義,為什么呢?

舉例來說,對于字符 "/b" 來說,它在 ASCII 中是有特殊意義的,表示退格鍵,而在正則表達式中,它是一個特殊的元字符,用于匹配一個單詞的邊界,為了能讓正則編譯器正確地表達它的意義就需要用原始字符串,當然也可以使用反斜杠 "/" 對常規定義的字符串進行轉義

>>> foo = "http://b">>> bar = r"/b">>> foo == barTrue

正則基本介紹

正則表達式由普通文本字符和特殊字符(元字符)兩種字符組成。元字符在正則表達式中具有特殊意義,它讓正則表達式具有更豐富的表達能力。例如,正則表達式 r"a.d"中 ,字符 'a' 和 'd' 是普通字符,'.' 是元字符,. 可以指代任意字符,它能匹配 'a1d'、'a2d'、'acd' ,它的匹配流程是:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 布尔津县| 南皮县| 通山县| 乌拉特中旗| 盱眙县| 波密县| 宽甸| 来宾市| 海口市| 泰兴市| 贵溪市| 延川县| 城口县| 秦安县| 九江县| 大港区| 龙里县| 育儿| 丰都县| 安图县| 北宁市| 泰州市| 张掖市| 通州区| 宁德市| 宁化县| 芷江| 怀远县| 洛扎县| 都安| 二手房| 中超| 青神县| 乌兰察布市| 宝兴县| 灌云县| 河源市| 和硕县| 和平县| 赤水市| 沙河市|