Python正則表達式的七個使用範例

2021-01-08 電子產品世界

作為一個概念而言,正則表達式對於Python來說並不是獨有的。但是,Python中的正則表達式在實際使用過程中還是有一些細小的差別。

本文引用地址:http://www.eepw.com.cn/article/201807/383660.htm

本文是一系列關於Python正則表達式文章的其中一部分。在這個系列的第一篇文章中,我們將重點討論如何使用Python中的正則表達式並突出Python中一些獨有的特性。

我們將介紹Python中對字符串進行搜索和查找的一些方法。然後我們講討論如何使用分組來處理我們查找到的匹配對象的子項。

我們有興趣使用的Python中正則表達式的模塊通常叫做『re』。

>>> import

re

1. Python中的原始類型字符串

Python編譯器用『』(反斜槓)來表示字符串常量中的轉義字符。

如果反斜槓後面跟著一串編譯器能夠識別的特殊字符,那麼整個轉義序列將被替換成對應的特殊字符(例如,『n』將被編譯器替換成換行符)。

但這給在Python中使用正則表達式帶來了一個問題,因為在『re』模塊中也使用反斜槓來轉義正則表達式中的特殊字符(比如*和+)。

這兩種方式的混合意味著有時候你不得不轉義轉義字符本身(當特殊字符能同時被Python和正則表達式的編譯器識別的時候),但在其他時候你不必這麼做(如果特殊字符只能被Python編譯器識別)。

與其將我們的心思放在去弄懂到底需要多少個反斜槓,我們可以使用原始字符串來替代。

原始類型字符串可以簡單的通過在普通字符串的雙引號前面加一個字符『r』來創建。當一個字符串是原始類型時,Python編譯器不會對其嘗試做任何的替換。本質上來講,你在告訴編譯器完全不要去幹涉你的字符串。

>>> string = 'This is annormal string'

>>> rawString = r'and this is anraw string'

>>> print string

這是一個普通字符串

>>> print rawString

and this

is anraw string

這是一個原始類型字符串。

在Python中使用正則表達式進行查找

『re』模塊提供了幾個方法對輸入的字符串進行確切的查詢。我們將會要討論的方法有:

re.match()

re.search()

re.findall()

每一個方法都接收一個正則表達式和一個待查找匹配的字符串。讓我們更詳細的查看這每一個方法從而弄明白他們是如何工作的以及他們各有什麼不同。

2. 使用re.match查找 – 匹配開始

讓我們先來看一下match()方法。match()方法的工作方式是只有當被搜索字符串的開頭匹配模式的時候它才能查找到匹配對象。

舉個例子,對字符串『dog cat dog』調用mathch()方法,查找模式『dog』將會匹配:

>>> re.match(r'dog', 'dog cat dog')

_sre.SRE_Match object at 0xb743e720

>>> match = re.match(r'dog', 'dog cat dog')

>>> match.group(0)

'dog'

我們稍後將更多的討論group()方法。現在,我們只需要知道我們用0作為它的參數調用了它,group()方法返回查找到的匹配的模式。

我還暫且略過了返回的SRE_Match對象,我們很快也將會討論到它。

但是,如果我們對同一個字符串調用math()方法,查找模式『cat』,則不會找到匹配。

>>> re.match(r'cat', 'dog cat dog')

>>>

3. 使用re.search查找 – 匹配任意位置

search()方法和match()類似,不過search()方法不會限制我們只從字符串的開頭查找匹配,因此在我們的示例字符串中查找『cat』會查找到一個匹配:

search(r'cat', 'dog cat dog')

>>> match.group(0)

'cat'

然而search()方法會在它查找到一個匹配項之後停止繼續查找,因此在我們的示例字符串中用searc()方法查找『dog』只找到其首次出現的位置。

>>> match =

re.search(r'dog', 'dog cat dog')

>>> match.group(0)

'dog'

4. 使用 re.findall – 所有匹配對象

目前為止在Python中我使用的最多的查找方法是findall()方法。當我們調用findall()方法,我們可以非常簡單的得到一個所有匹配模式的列表,而不是得到match的對象(我們會在接下來更多的討論match對象)。對我而言這更加簡單。對示例字符串調用findall()方法我們得到:

['dog', 'dog']

>>> re.findall(r'cat', 'dog cat dog')

['cat']

5. 使用 match.start 和 match.end 方法

那麼,先前search()和match()方法先前返回給我們的『match』對象」到底是什麼呢?

和只簡單的返回字符串的匹配部分不同,search()和match()返回的「匹配對象」,實際上是一個關於匹配子串的包裝類。

先前你看到我可以通過調用group()方法得到匹配的子串,(我們將在下一個部分看到,事實上匹配對象在處理分組問題時非常有用),但是匹配對象還包含了更多關於匹配子串的信息。

例如,match對象可以告訴我們匹配的內容在原始字符串中的開始和結束位置:

>>> match = re.search(r'dog', 'dog cat dog')

>>> match.start()

0

>>> match.end()

3

知道這些信息有時候非常有用。

6. 使用 mathch.group 通過數字分組

就像我之前提到的,匹配對象在處理分組時非常得心應手。

分組是對整個正則表達式的特定子串進行定位的能力。我們可以定義一個分組做為整個正則表達式的一部分,然後單獨的對這部分對應匹配到的內容定位。

讓我們來看一下它是怎麼工作的:

>>> contactInfo =

'Doe, John: 555-1212'

我剛才創建的字符串類似一個從某人的地址本裡取出來的一個片段。我們可以通過這樣一個正則表達式來匹配這一行:

>>> re.search(r'w+, w+: S+', contactInfo)

_sre.SRE_Match object

at 0xb74e1ad8

通過用圓括號來(字符『(』和『)』)包圍正則表達式的特定部分,我們可以對內容進行分組然後對這些子組做單獨處理。

>>> match =

re.search(r'(w+), (w+): (S+)', contactInfo)

這些分組可以通過用分組對象的group()方法得到。它們可以通過其在正則表達式中從左到右出現的數字順序來定位(從1開始):

>>> match.group(1)

'Doe'

>>> match.group(2)

'John'

>>> match.group(3)

'555-1212'

組的序數從1開始的原因是因為第0個組被預留來存放所有匹配對象(我們在之前學習match()方法和search()方法到時候看到過)。

>>> match.group(0)

'Doe, John: 555-1212'

7. 使用 match.group 通過別名來分組

有時候,特別是當一個正則表達式有很多分組的時候,通過組的出現次序來定位就會變的不現實。Python還允許你通過下面的語句來指定一個組名:

>>> match =

re.search(r'(?Pw+), (?Pw+): (?P

S+)', contactInfo)

我們還是可以用group()方法獲取分組的內容,但這時候我們要用我們所指定的組名而不是之前所使用的組的所在位數。

>>> match.group('last')

'Doe'

>>> match.group('first')

'John'

>>> match.group('phone')

'555-1212'

這大大加強了代碼的明確性和可讀性。你可以想像當正則表達式變得越來越複雜,去弄懂一個分組到捕獲了什麼內容將會變得越來越困難。給你的分組命名將明確的告訴了你和你的讀者你的意圖。

儘管findall()方法不返回分組對象,它也可以使用分組。類似的,findall()方法將返回一個元組的集合,其中每個元組中的第N個元素對應了正則表達式中的第N個分組。

>>> re.findall(r'(w+), (w+): (S+)', contactInfo)

[('Doe', 'John', '555-1212')]

但是,給分組命名並不適用於findall()方法。

在本文中我們介紹了Python中使用正則表達式的一些基礎。我們學習了原始字符串類型(還有它能幫你解決的在使用正則表達式中一些頭痛的問題)。我們還學習了如何適使用match(), search(), and findall()方法進行基本的查詢,以及如何使用分組來處理匹配對象的子組件。

和往常一樣,如果想查看更多關於這個主題的內容,re模塊的Python官方文檔是一個非常好的資源。

在以後的文章中,我們將更深入的討論Python中正則表達式的應用。我們將更加全面的學習匹配對象,學習如何使用它們在字符串中做替換,甚至使用它們從文本文件中去解析Python數據結構。

相關焦點

  • python正則表達式使用方法說明
    曾光紅/文 (同步發布豆瓜網)一、導入re庫python使用正則表達式要導入re庫。import re在re庫中。正則表達式通常被用來檢索查找、替換那些符合某個模式(規則)的文本。二、使用正則表達式步驟1、尋找規律;2、使用正則符號表示規律;3、提取信息,如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。
  • 三十一、深入Python中的正則表達式
    「@Author: Runsen」正則表達式應用的場景也非常多。常見的比如:搜尋引擎的搜索、爬蟲結果的匹配、文本數據的提取等等都會用到,所以掌握甚至精通正則表達式是一個硬性技能,非常必要。Python中則提供了強大的正則表達式處理模塊,即 re 模塊, 為Python的內置模塊。下面,我帶大家來一個入門demo例子,代碼如下:import rereg_string = "hello9527python@wangcai.@!
  • 原創通俗易懂的Python的正則表達式,建議收藏
    正則表達式正則表達式是一個特殊的字符序列,由普通字符和元字符組成。元字符能幫助你方便的檢查一個字符串是否與某種模式匹配。正則表達式應用的場景也非常多。常見的比如:搜尋引擎的搜索、爬蟲結果的匹配、文本數據的提取等等都會用到,所以掌握甚至精通正則表達式是一個硬性技能,非常必要。
  • Python學習第135課——初步了解正則表達式以及正則表達式的用法
    【每天幾分鐘,從零入門python編程的世界!】從現在開始,我們學習正則表達式。正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學的一個概念。
  • Python「正則表達式」詳解(上)
    大家好,今天我們一起學習以下Python中的「正則表達式」,說到正則表達式,大家可能比較陌生,不過我卻要告訴你,你每天都在使用正則表達式,不要不承認,就問你最常見的,瀏覽器每天用不?淘寶經常逛不?你在搜索框裡輸入幾個文字,按下回車,就出來大量結果,你想想這是怎麼辦到的,是正則表達式,可以好不誇張的講,沒有正則表達式,就沒有搜尋引擎。
  • 學習Python正則表達式
    Python中的正則表達式(re)就可以解決這個問題!正則表達式正則表達式是一個具有特殊字符的序列。它有助於檢查字符串中的每個字符,看它是否與某個模式匹配:哪些字符在什麼位置出現了多少次。result = re.findall(r』\d』, text)這將返回所有數字,但每個元素只有一個數字:['1', '0', '0', '1', '1', '1', '1', '2', '3', '4', '5', '6', '7']r-python原始字符串這裡,r表示python
  • Python中的正則表達式及其常用匹配函數用法簡介
    Python正則表達式初識(二)3. Python正則表達式初識(三)4. Python正則表達式初識(四)5. Python正則表達式初識(五)6. Python正則表達式初識(六)7. Python正則表達式初識(七)8. Python正則表達式初識(八)9.
  • python之:正則表達式-re模塊
    ----模糊匹配說明:正則表達式-所有操作對象只是字符串,多個返回list。本身是一門小型高度專業的程式語言,內嵌在python中,並通過re模塊實現,用C編寫的引擎執行方法:re.match(pattern, string) 從字符串的起始位置匹配,返回一個匹配子串。
  • Python正則表達式:特殊符號和字符
    正表達式為高級的文本模式匹配,抽取,與/或文本形式的搜索和替換功能提供了基礎。簡而言之,正則表達式(簡稱regex)是由一些字符和特殊符號組成的字符串,它描述了模式的重複或者表達多個字符。python通過標準庫中的re模塊來支持正則表達式。
  • 代碼詳解:Python正則表達式的終極使用指南
    雖然想要實現上述功能聽起來很繁瑣,但是如果使用Python正則表達式模塊,就可以使這一操作更加簡單。假設要在一篇特定的文章中找出標點符號的數量。以狄更斯的作品文本為例。你通常會怎麼做?但如果有re模塊,則只需兩行代碼:import repattern = r"[;.,–]"print(len(re.findall(pattern,string)))-19本文討論的是最常用的正則表達式模式,以及一些經常使用的正則表達式函數。什麼是正則表達式?
  • Python機器學習之手寫數字辨識及正則表達式
    Digits數據集由1797個元素組成,可以考慮用前1791個作為訓練集,剩餘6個作為驗證集。我們可以再次使用matplotlib生成這6個手寫體數字的圖像,以便查看其細節。我們可以看到,我們生成了6個數字的圖像。現在我們可以讓先前定義的svc估計器進行學習。我們可以看到我們6個數字的預測結果完全正確,svc估計器能夠正確地學習,識別手寫體數字。
  • Python 正則表達式大全(下)
    這個標誌影響 \w, \W, \b, \B.re.X該標誌通過給予你更靈活的格式以便你將正則表達式寫得更易於理解。正則表達式模式模式字符串使用特殊的語法來表示一個正則表達式:字母和數字表示他們自身。一個正則表達式模式中的字母和數字匹配同樣的字符串。多數字母和數字前加一個反斜槓時會擁有不同的含義。
  • 一篇文章搞定Python正則表達式
    獲取正則表達式來提取字符串中符合要求的文本3. 替換查找字符串中符合正則表達式的文本,並用相應的字符串替換4. 分割使用正則表達式對字符串進行分割。2.2 Python中re模塊使用正則表達式的兩種方法1. 使用re.compile(r, f)方法生成正則表達式對象,然後調用正則表達式對象的相應方法。這種做法的好處是生成正則對象之後可以多次使用。
  • Python:正則表達式基本符號總結
    說明:如果需要匹配的字符是正則表達式中的特殊字符,那麼可以使用\進行轉義處理,例如想匹配小數點可以寫成\.就可以了,因為直接寫.會匹配任意字符;同理,想匹配圓括號必須寫成和。在python中,如果使用正則表達式的話,需要導入re模塊,re模塊是一個內置模塊,直接import就可以使用,下面是re模塊中的核心函數。
  • 「正則表達式」 python中的使用
    正則表達式的介紹在實際開發過程中經常會有查找符合某些複雜規則的字符串的需要,比如:郵箱、圖片地址、手機號碼等,這時候想匹配或者查找符合某些規則的字符串就可以使用正則表達式了。2.正則表達式概念正則表達式就是記錄文本規則的代碼3. 正則表達式的樣子0\d{2}-\d{8} 這個就是一個正則表達式,表達的意思是匹配的是座機號碼4.
  • 有趣的Python和正則表達式
    因為每個正則表達式只能匹配有限數量的字符串並且具有有限數量的條件分支,所以它定義了一個有限狀態機(FSM)。,因此其返回的是一個列表要嘗試Python的趣味性,看看是否可以讓正則表達式在第一個模式上「短路」,而當由人來判斷這3個模式時
  • 程式設計師入門基礎:python正則表達式貪婪匹配和非貪婪匹配
    此文為python正則表達式的高階入門,正則基礎入門請參考程式設計師入門基礎:python的正則表達式。一、貪婪匹配和非貪婪匹配舉例說明概念:print('非貪婪匹配',re.search('el+?'匹配0個或1個由前面的正則表達式定義的片段,非貪婪方式re{ n} 匹配n個前面表達式。例如,"o{2}"不能匹配"god"中的"o",但是能匹配"good"中的兩個o。re{ n,} 精確匹配n個前面表達式。例如,"o{2,}"不能匹配"god"中的"o",但能匹配"gooood"中的所有o。"o{1,}"等價於"o+"。"o{0,}"則等價於"o*"。
  • 教你學習:Python-100-Days-12 正則表達式
    教你學習: Python-100-Days-12 正則表達式本項目是參考項目內容,進行個人理解,和原有項目有出入,如想了解詳情,請自行百度去搜索項目在編寫處理字符串的程序或網頁時,經常會有查找符合某些複雜規則的字符串的需要,正則表達式就是用於描述這些規則的工具,換句話說正則表達式是一種工具
  • python面試題匯總第06期-正則表達式(內附7題及答案)
    1.python正則表達式中匹配(match)和查找(search)的區別答:正則表達式中match和search的方法比較相似相同點:都是在一個字符串s中尋找pat子字符串,如果能找到答:利用python正則表達式re模塊中的sub方法,將標籤替換為空字符串,代碼如下:運行結果:python小當家 python面試題匯總4.python中用正則表達式提取字符串中所有域名:
  • 再見,正則表達式
    從一段指定的字符串中,取得期望的數據,正常人都會想到正則表達式吧?寫過正則表達式的人都知道,正則表達式入門不難,寫起來也容易。但是正則表達式幾乎沒有可讀性可言,維護起來,真的會讓人抓狂,別以為這段正則是你寫的就可以駕馭它,過個一個月你可能就不認識它了。完全可以說,天下苦正則久矣。今天給你介紹一個好東西,可以讓你擺脫正則的噩夢,那就是 Python 中一個非常冷門的庫 -- parse。