您是否曾經想知道在文件中查詢某些文字或確保文字符合某種格式(例如,例如電子郵件位址)和其他類似操作的關鍵是什麼?
此類操作的關鍵是正規表示式(regex) 。 讓我們看一下正規表示式的一些定義。 在wikipedia中,正規表示式的定義如下:
定義搜尋模式的字串行,主要用於與字串進行模式匹配或字串匹配(即類似「查詢和替換」的操作)。來自regular-expressions.info的另乙個不錯的定義是:這個概念出現於2023年代,當時美國數學家stephen kleene將常規語言的描述形式化,並與unix文字處理實用程式ed(編輯器)和grep(過濾器)共同使用。
正規表示式(簡稱regex或regexp)是用於描述搜尋模式的特殊文字字串。我知道正規表示式的概念可能仍然聽起來有些模糊。 因此,讓我們看一下正規表示式的一些示例,以更好地理解該概念。您可以將正規表示式視為類固醇的萬用字元。
您可能熟悉萬用字元,例如* .txt,可在檔案管理器中查詢所有文字檔案。
正規表示式等效為。* \。txt $
在本節中,我將向您展示一些正規表示式示例,以幫助您進一步理解該概念。
假設您有此正規表示式:
/abder/
這只是在告訴我們僅匹配「abder
」一詞。
那這個正規表示式呢?
/a[nr]t/
您可以按以下方式閱讀此正規表示式:找到乙個文字模式,使第乙個字母為a
,最後乙個字母為t
,並且在這些字母之間輸入n
或r
。 因此,匹配的詞是ant
和art
。
現在讓我給你乙個小測驗。 您將如何編寫以ca
開頭並以以下乙個或所有以下字元tbr
結尾的正規表示式? 是的,此正規表示式可以編寫如下:
/ca[tbr]/
如果看到以抑揚音^
開頭的正規表示式,則表示匹配以^
後面提到的字串開頭的字串。 因此,如果下面有正規表示式,則它與以this
開頭的字串匹配。
/^this/
因此,在以下字串中:
my name is abder
this is abder
this is tom
基於正規表示式/^this/
,將匹配以下字串:
this is abder
this is tom
如果我們想匹配以某個字串結尾的字串怎麼辦? 在這種情況下,我們使用美元符號$
。 這是乙個例子:
abder$
因此,在上面的字串(三行)中,將使用此正規表示式匹配以下模式:
my name is abder
this is abder
好吧,您如何看待此正規表示式?
^[a-z][a-z]
我知道乍一看似乎很複雜,但讓我們逐一介紹一下。
我們已經看到了抑揚音^
是什麼。 這意味著匹配以某個字串開頭的字串。[az]
表示大寫字母。 因此,如果我們閱讀正規表示式的這一部分:^[az]
,它告訴我們匹配以大寫字母開頭的字串。 最後一部分[az]
表示找到以大寫字母開頭的字串後,將跟著字母中的小寫字母。
那麼,以下哪個字串將使用此正規表示式進行匹配? 如果不確定,可以使用python,如我們在下一節中看到的那樣,以測試您的答案。
abder
abder
abder
abder
正規表示式是乙個非常廣泛的主題,這些示例只是為了讓您了解它們的含義以及我們為什麼使用它們。
現在讓我們進入有趣的部分。 我們想看看如何在python中使用上述某些正規表示式。 我們將用於在python中使用正規表示式的模組是re
模組。
第乙個例子是關於找到abder
這個詞。 在python中,我們將執行以下操作:
import re
text = 'my name is abder'
match_pattern = re.match(r'abder', text)
print match_pattern
如果執行上面的python指令碼,將得到輸出:none
!
該指令碼可以正常工作,但是問題在於功能match()
工作方式。 如果我們返回到re
模組文件,這就是match()
函式的作用:
如果字串開頭的零個或多個字元與正規表示式模式匹配,則返回相應的匹配物件。呵呵,由此可見,僅當在字串開頭找到匹配項時,如果字串與模式不匹配,則返回none;否則返回false。
請注意,這與零長度匹配不同。
match()
才會返回結果。
我們可以改用基於文件的search()
函式:
掃瞄字串以查詢正規表示式模式產生匹配項的第乙個位置,然後返回相應的匹配物件。因此,如果我們編寫上述指令碼,但是使用如果字串中沒有位置與模式匹配,則返回none;否則,返回none。
請注意,這與在字串中的某個點找到零長度匹配不同。
search()
而不是match()
,則會得到以下輸出:
<_sre.sre_match object at 0x101cfc988>
也就是說,已返回乙個match object
。
如果要返回結果(字串匹配),請使用group()
函式。 如果要檢視整個匹配項,請使用group(0)
。 從而:
print match_pattern.group(0)
將返回輸出:abder
。
import re
text = 'this is a black ant'
match_pattern = re.search(r'a[nr]t', text)
print match_pattern.group(0)
該指令碼的輸出為:ant
。
這篇文章越來越長,python中的正規表示式主題肯定需要多於一篇文章,即使不是一本書本身。
但是,本文旨在為您提供快速入門和自信,讓您進入python正規表示式領域。 您可以參考re
文件以了解有關此模組以及如何深入了解本主題的更多資訊。
翻譯自:
python中的正規表示式
正規表示式是一種用來匹配字串的強有力的 它的設計思想是用一種描述性的語言來給字串定義乙個規則,凡是符合規則的字串,我們就認為它 匹配 了,否則,該字串就是不合法的。因為正規表示式也是用字串表示的,所以,我們要首先了解如何用字元來描述字元。在正規表示式中,如果直接給出字元,就是精確匹配。用 d可以匹配...
Python中的正規表示式
在使用python製作爬蟲之前,我們必須要對python的正規表示式有一定的了解,在python中使用正規表示式要匯入re包 d匹配數字1 9 w匹配字元 匹配集合裡面的字元 匹配前面出現的正規表示式1次或多次 表示匹配任意乙個字元,除換行符除外,x.匹配xy23中的xy,若是x.則匹配出xy2 表...
Python中的正規表示式
對應 abc 001 s r abc 001 加r字首,就不用考慮轉義的問題了。print re.match d d 010 12345 匹配成功返回乙個match物件,否則返回none.re.match 的常見寫法 test 輸入字串 if re.match 正規表示式 test print ok...