學習Python正則表達式

2021-01-07 人工智慧遇見磐創

李丹剛在一家經銷店找到了新工作,他的工作是給那些在評論頁留下電話號碼的客戶打電話。然而,讓李丹煩惱的是,評論是以自由文本的形式展現,電話號碼就在這些評論中。

如何不需要一個接一個地複製和粘貼,就可以輕鬆地找到這些電話號碼?Python中的正則表達式(re)就可以解決這個問題!

正則表達式

正則表達式是一個具有特殊字符的序列。它有助於檢查字符串中的每個字符,看它是否與某個模式匹配:哪些字符在什麼位置出現了多少次。

讓我們看看丹正在讀的評論:

「I have called the service desk 100 times and nobody replies to me. I need a conversation ASAP!! My number is 111–1234567!」

讓我們看看李丹的需求是:

『我明確地知道我要尋找哪個號碼。』

import retext = 'I have called the service desk 100 times and nobody replies to me. I need a conversation ASAP!! My number is 111-1234567!'result = re.findall('111-1234567', text)上面的代碼返回「111–1234567」。如果它在文本中重複,它將返回兩次電話號碼。

『有時我不知道具體的號碼,需要從評論中找到客戶號碼。』

result = re.findall(r』\d』, text)這將返回所有數字,但每個元素只有一個數字:

['1', '0', '0', '1', '1', '1', '1', '2', '3', '4', '5', '6', '7']r-python原始字符串

這裡,r表示python原始字符串。指定「r」意味著我們不希望Python將「\」視為轉義字符,而只將其視為普通字符。

下面是兩個比較的例子:

print(r』Hello\nWorld!』)print(「=========」)print(『Hello\nWorld!』)代碼返回:

Hello\nWorld!=========HelloWorld!\d-所有數字,但只有一個數字

如果文本包含數字,考慮匹配「\d」模式。

『我想得到每條評論中完整的號碼,而非單個數字。』

result = re.findall(r』\d+』, text)代碼返回:

['100', '111', '1234567']「\d」後面的「+」表示一個或多個數字。所以它不會一位數一位數地掃描數字,而是把整個拿走。

『我只想得到電話號碼,不需要截取其他數字。』

好吧,沒問題。讓我們看看如何知道111–1234567是一個電話號碼。因為它的區號是3位數,連接符是「-」,然後是7位數。因此,我們可以進行如下程序:

result = re.findall(r』\d{3}-\d{7}』, text){3} — 3 digits, {7} — digits

上面的代碼意味著我們要查找的字符串由3個數字組成,後跟一個「-」,然後是7個數字。

是的!這正是你要找的!

『那麼,如果客戶沒有留下他們的區號呢?』

I have called the service desk 100 times and nobody replies to me. I need a conversation ASAP!! My number is 111–1234567! My other number is 7654321!

text = 'I have called the service desk 100 times and nobody replies to me. I need a conversation ASAP!! My number is 111-1234567! My other number is 7654321!'result = re.findall(r』\d{3}-\d{7}|\d{7}』, text)代碼返回:

['111–1234567','7654321']'|'—與其他python代碼類似,它的意思是OR。所以以上代碼表達將選擇「3位數-7位數」或「7位數」兩種模式的數字。

『太棒了!正則表達式還有其他可以實現的功能嗎?』

位置

當然,在開始的時候,我們提到的RE也可以檢測到位置。因此,如果客戶在句子的開頭寫上電話號碼,你可以這樣做:

text = '111-1234567! That is my number! The other one is 7654321!'result = re.findall(r』^\d{3}-\d{7}|^\d{7}』, text)「^」表示只有在電話號碼顯示在句子開頭時才匹配。所以只有「111–1234567」匹配並返回。

重複

text = 'abcabc aa cc dd e 123123 abcabab'result = re.findall(r'(\w{3})(\1)', text)\w ,類似於d表示數字,w則表示任何字符:digit, character等等。

re.findall語法中的(\w{3})表示3個字符,(\1)表示返回值中重複與(\w{3})相同的值(這裡「1」表示第一個括號中代表的值)。

所以以上代碼返回:(「abc」,「abc」),(' 123 ',' 123 '))。

如果我們更改代碼為:

result = re.findall(r』(\w{3})(\w{2})(\2)』, text)(\w{3})(\w{2})(\2)表示3個字符、2個字符和重複(\w{2})代表的值((\2)中的「2」表示第二個括號中代表的值)。

因此上面的代碼返回:[(' abc ', ' ab ', ' ab ')]。

結論

RE有很多表達方式,當我第一次看到它的時候我完全不知所措,但是當你知道它的類型和含義後,會發現它非常容易。

哦,我還想提一下這個命令:

re.search()上文中使用過的re.findall(),與它不同的是,re.search()將只返回與模式匹配的第一個字符串。

最後,是我總結的一些常見的表達方式。

希望本文能幫助你快速掌握正則表達式!

相關焦點

  • Python正則表達式總結
    正則表達式 的起源、發展、流派、語法、引擎、優化等相關知識,今天我們主要來學習一下 正則表達式在 Python語言 中的應用!大多數程式語言的正則表達式設計都師從Perl,所以語法基本相似,不同的是每種語言都有自己的函數去支持正則,今天我們就來學習 Python中關於 正則表達式的函數。re模塊主要定義了9個常量、12個函數、1個異常,每個常量和函數豬哥都會通過實際代碼案例講解,讓大家能更直觀的了解其作用!註:為避免出現代碼格式錯亂,豬哥儘量使用代碼截圖演示哦。
  • 萬字長文詳解Python正則表達式及re模塊
    語法格式如下:re.match(pattern, string, flags=0)pattern是匹配的正則表達式,string是要匹配的字符串。flags是標誌位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。
  • Python 正則表達式
    最簡單的正則表達式就是普通字符串,可以匹配其自身。比如,正則表達式 『hello』 可以匹配字符串 『hello』。要注意的是,正則表達式並不是一個程序,而是用於處理字符串的一種模式,如果你想用它來處理字符串,就必須使用支持正則表達式的工具,比如 Linux 中的 awk, sed, grep,或者程式語言 Perl, Python, Java 等等。
  • 教你學習:Python-100-Days-12 正則表達式
    教你學習: Python-100-Days-12 正則表達式本項目是參考項目內容,進行個人理解,和原有項目有出入,如想了解詳情,請自行百度去搜索項目在編寫處理字符串的程序或網頁時,經常會有查找符合某些複雜規則的字符串的需要
  • python正則表達式
    微信公眾號:學點啥玩點啥小白友好型python正則表達式 1#第7章 模式匹配與正則表達式
  • 原創通俗易懂的Python的正則表達式,建議收藏
    正則表達式正則表達式是一個特殊的字符序列,由普通字符和元字符組成。元字符能幫助你方便的檢查一個字符串是否與某種模式匹配。正則表達式應用的場景也非常多。常見的比如:搜尋引擎的搜索、爬蟲結果的匹配、文本數據的提取等等都會用到,所以掌握甚至精通正則表達式是一個硬性技能,非常必要。
  • Python正則表達式,這一篇就夠了!
    之前我們講解了 正則表達式 的起源、發展、流派、語法、引擎、優化等相關知識,今天我們主要來學習一下 正則表達式在 Python語言 中的應用
  • Python正則表達式:特殊符號和字符
    正表達式為高級的文本模式匹配,抽取,與/或文本形式的搜索和替換功能提供了基礎。簡而言之,正則表達式(簡稱regex)是由一些字符和特殊符號組成的字符串,它描述了模式的重複或者表達多個字符。python通過標準庫中的re模塊來支持正則表達式。
  • Python正則表達式入門到入魔
    學習電子書關於正則表達式,很多人認為,使用的時候查詢下就可以,沒必要深入學習,但是知識與應用永遠都是螺旋辯證的關係,有需要查詢也無可厚非,但是先掌握知識,可以讓應用更創新,更深入,超越他人,必須要先掌握大量的深刻的知識。
  • Python3爬蟲(4)--python正則表達式詳細版
    等等,在python中,這些都可以用正則表達式處理函數進行處理。re 模塊使 Python 語言擁有全部的正則表達式功能。函數語法:re.search(pattern, string, [flags])re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字符串,直到找到一個匹配。所以實際應用往往使用re.search()函數。pattern:匹配的正則表達式(參考後面的正則表達式匹配模式附件)。
  • 妙用正則表達式--Python中的re模塊
    Python中的re模塊可以方便地引入正則表達式。利用正則表達式,我們可以對文本內容進行精確快捷地匹配和提取。與Stata相比,正則表達式的元字符是通用的,不同的是函數。re庫中有若干個函數各司其職,在上一篇推文《Python標準庫re:正則表達式》中我們介紹了re庫中的三個常用函數,現在小編將從實用的角度再介紹幾個常用的函數。
  • Python之re模塊方法詳解(正則表達式)
    學習re模塊首先要對python正則表達式要了解,正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配
  • Python中的正則表達式
    什麼是正則表達式正則表達式是用於處理字符串的強大工具,它使用預定義的特定模式去匹配一類具有共同特徵的字符串,主要用於快速、準確地完成複雜字符串的查找、替換等。正則表達式進行匹配的流程如下圖所示:正則表達式匹配過程是:依次拿出表達式和文本中的字符比較,如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。
  • python re庫的正則表達式學習筆記
    安裝默認已經安裝好了python環境了re庫是python3的核心庫,不需要pip install,直接import就行2.通配符在正則表達式中,有些字符是有特殊意義的(不是轉義字符的那套規則),下面介紹常用的通配符字符1)"."
  • 推薦|Python 正則表達式 re 模塊簡明筆記
    最簡單的正則表達式就是普通字符串,可以匹配其自身。比如,正則表達式 『hello』 可以匹配字符串 『hello』。有一點需要特別注意的是,正則表達式使用 \ 對特殊字符進行轉義,比如,為了匹配字符串 『python.org』,我們需要使用正則表達式 'python\.org',而 Python 的字符串本身也用 \ 轉義,所以上面的正則表達式在 Python 中應該寫成 'python\\.org',這會很容易陷入 \ 的困擾中,因此,我們建議使用 Python 的原始字符串,只需加一個 r 前綴
  • python正則表達式使用方法說明
    曾光紅/文 (同步發布豆瓜網)一、導入re庫python使用正則表達式要導入re庫。import re在re庫中。正則表達式通常被用來檢索查找、替換那些符合某個模式(規則)的文本。二、使用正則表達式步驟1、尋找規律;2、使用正則符號表示規律;3、提取信息,如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。
  • 【Python】一文讀懂Python正則表達式常用用法
    最簡單的正則表達式就是普通字符串,可以匹配其自身。比如,正則表達式 『hello』 可以匹配字符串 『hello』。要注意的是,正則表達式並不是一個程序,而是用於處理字符串的一種模式,如果你想用它來處理字符串,就必須使用支持正則表達式的工具,比如 Linux 中的 awk, sed, grep,或者程式語言 Perl, Python, Java 等等。
  • Python中正則表達式模塊詳解
    用來處理字符串,對字符串進行檢索和替換,另外正則在python爬蟲的應用也是相當廣泛!
  • Python爬蟲提取神器,正則表達式(re模塊),全程乾貨!
    python正則表達式(re模塊)什麼是正則表達式正則表達式(Regular Expression)是一種文本模式,包括普通字符(例如,a到z之間的字母
  • Python:正則表達式基本符號總結
    字符串是我們在編程的時候很常用的一種數據類型,檢查會在字符串裡面查找一些內容,對於比較簡單的查找,字符串裡面就有一些內置的方法可以處理,對於比較複雜的字符串查找,或者是有一些內容經常變化的字符串裡面查找,那麼字符串內置的查找方法已經不好使了,滿足不了我們的要求,這個時候就得用正則表達式了,正則表達式就是用來匹配一些比較複雜的字符串。