當前位置:
首頁 > 最新 > 詳解Python編程開發小白必學的正則表達式的奇淫技巧

詳解Python編程開發小白必學的正則表達式的奇淫技巧

首先說明正則表達式是什麼:

正則表達式,又稱正規表示式、正規表示法、正規表達式、規則表達式、常規表示法(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學的一個概念。正則表達式使用單個字元串來描述、匹配一系列匹配某個句法規則的字元串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些需要的字元.

正則表達式是一個特殊的字元序列,它能幫助你方便的檢查一個字元串是否與某種模式匹配。

Python 自1.5版本起增加了re 模塊,它提供 Perl 風格的正則表達式模式。

re 模塊使 Python 語言擁有全部的正則表達式功能。

compile 函數根據一個模式字元串和可選的標誌參數生成一個正則表達式對象。該對象擁有一系列方法用於正則表達式匹配和替換。

re 模塊也提供了與這些方法功能完全一致的函數,這些函數使用一個模式字元串做為它們的第一個參數。

在python中同樣支持正則表達式,在re模塊中儲存了對應的正則對應方法,接下來就簡單介紹一下正則表達式的入門知識.

首先,我們要明白我們的需求是什麼,比如在key="daiuhfaiuhugaysqiehoiuuiwug"(隨便打得)這一串字元串中匹配出自己想要的字元:

假設我們想匹配"gays"這麼一串字元串:

import rekey = r"daiuhfaiuhugaysqiehoiuuiwug"

answer = r"gays"final1 = re.compile(answer

result = re.search(final1,key)

print(result.group(0))

結果:

這就是最簡單的字元匹配的實現

可能有的朋友不知道語句中compile的作用

代碼中re.compile將正則表達式(以字元串書寫的)轉換為模式對象,可以實現更加有效的匹配,當成一個編譯函數即可,我們之後會詳細說,這裡還是要推薦下小編的Python學習裙:『』五八八,零九零,九四二『』不管你是小白還是大牛,小編我都歡迎,不定期分享乾貨,包括小編自己整理的一份2018最新的Python資料和0基礎入門教程,歡迎初學和進階中的小夥伴。在不忙的時間我會給大家解惑。

大家可能還有一個疑惑點就是在代碼中的"r",這個字元的意思是將字元串中的轉義字元過濾,不會進行轉義,比如"
"等等的特殊字元,不然很難匹配到,在上述代碼中不存在轉義字元,故刪除r字元結果也沒變.

PS:正則表達式是區分大小寫的,在python裡面也是,所以一定注意

介紹另一種正則的用法

import rekey = "daiuhfaiuhuc我找到你了!cgaysqiehoiuuiwugd"

answer = r"c.+c"final1 = re.compile(answer)

result = re.search(final1,key)

print(result.group(0))

結果如上所示,引出關於"."的描述,在正則表達式中,"."可以表示所有字元,包括其本身,所以在匹配知道特定區域而不知道特定內容的字元串中,可以使用"."將所有的匹配成功得字元輸出

如果我們要用特殊的形式輸出匹配的字元呢?比如下面這個代碼可以輸出包含所有匹配到的字元串的列表:

import rekey = "daiuhfaiuhuc我找到你了!cgaysqiehoiuuiwugd"

answer = r"c.+c"final1 = re.compile(answer)

result = re.search(final1,key)

print(final1.findall(key))

當然,你也可以在他後面加上對應的索引拿到其元素.

print(final1.findall(key)[0])

將上述代碼換入程序中的結果,輸出了list[0]元素

這時候有朋友可能會疑惑,既然"."用來匹配所有字元,那麼它本身用什麼匹配?

相信大多數有編程基礎的朋友都知道""的作用

沒錯,就是轉義,在python中的正則也可以這麼用:

import re

key = "daiuhfaiuhuc我找到你了:[.]cgaysqiehoiuuiwugd"

answer = r"."

final1 = re.compile(answer)

result = re.search(final1,key)

print(final1.findall(key))

在前面的實例中,我們在下面代碼中運用了"+",這裡有必要作一下說明,在這裡的+指的是對前方的字元進行多次匹配,而如果單獨一個"."是沒法將所有字元統統匹配出來的

只有一個空列表輸出,在沒有+的情況下.

在使用的情況下,可以匹配到在*號前的字元0次或者多次:

import re

key = "get it better,betterr"

answer = r"better*"

final1 = re.compile(answer)

result = re.search(final1,key)

print(final1.findall(key))

以上使用了*匹配法則

在要匹配的字元串中,有better和betterr這兩個需要匹配出來的,那麼如果只匹配一個r後面的另一個字元串便無法得到匹配,所以在python中定義了*可以匹配在其之前的字母0次或者多次.

上述我們說過,在python中,是區分大小寫的,所以,如果我們要匹配同時大小寫的字元串,我們就需要用到"[]"

[Bb]表示匹配大寫小寫的字母b

以此類推

import rekey = "get it Better,betterr"answer = r"[Bb]etter*"final1 = re.compile(answer)result = re.search(final1,key)print(final1.findall(key))

即可得到我們想要的結果:

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

Python編程筆記(五)-動態屬性
這是我見過最完整的模塊資料!Python有這樣的資源,很快就入門!

TAG:Python |