Python中的正規表示式

2021-10-07 10:45:21 字數 3692 閱讀 5881

您是否曾經想知道在文件中查詢某些文字或確保文字符合某種格式(例如,例如電子郵件位址)和其他類似操作的關鍵是什麼?

此類操作的關鍵是正規表示式(regex) 。 讓我們看一下正規表示式的一些定義。 在wikipedia中,正規表示式的定義如下:

定義搜尋模式的字串行,主要用於與字串進行模式匹配或字串匹配(即類似「查詢和替換」的操作)。

這個概念出現於2023年代,當時美國數學家stephen kleene將常規語言的描述形式化,並與unix文字處理實用程式ed(編輯器)和grep(過濾器)共同使用。

來自regular-expressions.info的另乙個不錯的定義是:

正規表示式(簡稱regex或regexp)是用於描述搜尋模式的特殊文字字串。

您可以將正規表示式視為類固醇的萬用字元。

您可能熟悉萬用字元,例如* .txt,可在檔案管理器中查詢所有文字檔案。

正規表示式等效為。* \。txt $

我知道正規表示式的概念可能仍然聽起來有些模糊。 因此,讓我們看一下正規表示式的一些示例,以更好地理解該概念。

在本節中,我將向您展示一些正規表示式示例,以幫助您進一步理解該概念。

假設您有此正規表示式:

/abder/
這只是在告訴我們僅匹配「abder」一詞。

那這個正規表示式呢?

/a[nr]t/
您可以按以下方式閱讀此正規表示式:找到乙個文字模式,使第乙個字母為a,最後乙個字母為t,並且在這些字母之間輸入nr。 因此,匹配的詞是antart

現在讓我給你乙個小測驗。 您將如何編寫以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...