首頁 >後端開發 >Python教學 >Python中的正規表示式

Python中的正規表示式

WBOY
WBOY原創
2023-08-27 10:05:211239瀏覽

Python中的正規表示式

您是否想過在文件中尋找某些文字或確保文字符合某種格式(例如電子郵件地址)的關鍵是什麼,以及其他類似的操作?

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

定義搜尋模式的字元序列,主要用於與字串的模式匹配或字串匹配,即「尋找和取代」之類的操作。這個概念出現在 20 世紀 50 年代,當時美國數學家 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]

我知道乍看之下可能看起來很複雜,但讓我們一點一點地看一下。

我們已經了解了什麼是抑揚音 ^ 。這意味著匹配以某個字串開頭的字串。 [A-Z] 指的是大寫字母。因此,如果我們閱讀正規表示式的這一部分: ^[A-Z],它告訴我們匹配以大寫字母開頭的字串。最後一部分 [a-z] 表示找到以大寫字母開頭的字串後,後面會跟著字母表裡的小寫字母。

那麼,使用此正規表示式將符合下列哪些字串?如果您不確定,您可以使用 Python(我們將在下一節中看到)來測試您的答案。

abder
Abder
ABDER
ABder

正規表示式是一個非常廣泛的主題,這些範例只是為了讓您了解它們是什麼以及我們為什麼使用它們。

RexEgg 是了解更多有關正規表示式並查看更多範例的一個很好的參考。

Python 中的正規表示式

現在讓我們來看看有趣的部分。我們希望了解如何在 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;请注意,这与零长度匹配不同。

啊哈,从这里我们可以看出,match() 仅当在字符串的开头找到匹配项时才会返回结果。

我们可以使用函数 search(),这是基于文档的:

扫描字符串,查找正则表达式模式产生匹配的第一个位置,并返回相应的匹配对象。如果字符串中没有位置与模式匹配,则返回 None;请注意,这与在字符串中的某个点查找零长度匹配不同。

因此,如果我们编写上面的脚本,但使用 search() 而不是 match(),我们会得到以下输出:

<_sre.sre_match></_sre.sre_match>

即返回了一个匹配对象

如果我们想返回结果(字符串匹配),我们使用 group() 函数。如果我们想查看整个比赛,我们使用 group(0)。因此:

打印 match_pattern.group(0)

将返回输出:Abder

如果我们采用上一节中的第二个正则表达式,即 /a[nr]t/,则可以用 Python 编写如下:

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中的正規表示式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn