1. 程式人生 > >Python正則表示式指南 (轉自:AstralWind)

Python正則表示式指南 (轉自:AstralWind)

原文戳這裡

1. 正則表示式基礎

1.1. 簡單介紹

正則表示式並不是Python的一部分。正則表示式是用於處理字串的強大工具,擁有自己獨特的語法以及一個獨立的處理引擎,效率上可能不如str自帶的方法,但功能十分強大。得益於這一點,在提供了正則表示式的語言裡,正則表示式的語法都是一樣的,區別只在於不同的程式語言實現支援的語法數量不同;但不用擔心,不被支援的語法通常是不常用的部分。如果已經在其他語言裡使用過正則表示式,只需要簡單看一看就可以上手了。

下圖展示了使用正則表示式進行匹配的流程: 
re_simple

正則表示式的大致匹配過程是:依次拿出表示式和文字中的字元比較,如果每一個字元都能匹配,則匹配成功;一旦有匹配不成功的字元則匹配失敗。如果表示式中有量詞或邊界,這個過程會稍微有一些不同,但也是很好理解的,看下圖中的示例以及自己多使用幾次就能明白。

下圖列出了Python支援的正則表示式元字元和語法:   
pyre

1.2. 數量詞的貪婪模式與非貪婪模式

正則表示式通常用於在文字中查詢匹配的字串。Python裡數量詞預設是貪婪的(在少數語言裡也可能是預設非貪婪),總是嘗試匹配儘可能多的字元;非貪婪的則相反,總是嘗試匹配儘可能少的字元。例如:正則表示式"ab*"如果用於查詢"abbbc",將找到"abbb"。而如果使用非貪婪的數量詞"ab*?",將找到"a"。

1.3. 反斜槓的困擾

與大多數程式語言相同,正則表示式裡使用"\"作為轉義字元,這就可能造成反斜槓困擾。假如你需要匹配文字中的字元"\",那麼使用程式語言表示的正則表示式裡將需要4個反斜槓"\\\\":前兩個和後兩個分別用於在程式語言裡轉義成反斜槓,轉換成兩個反斜槓後再在正則表示式裡轉義成一個反斜槓。Python裡的原生字串很好地解決了這個問題,這個例子中的正則表示式可以使用r"\\"表示。同樣,匹配一個數字的"\\d"可以寫成r"\d"。有了原生字串,你再也不用擔心是不是漏寫了反斜槓,寫出來的表示式也更直觀。

1.4. 匹配模式

正則表示式提供了一些可用的匹配模式,比如忽略大小寫、多行匹配等,這部分內容將在Pattern類的工廠方法re.compile(pattern[, flags])中一起介紹。

2. re模組

2.1. 開始使用re

Python通過re模組提供對正則表示式的支援。使用re的一般步驟是先將正則表示式的字串形式編譯為Pattern例項,然後使用Pattern例項處理文字並獲得匹配結果(一個Match例項),最後使用Match例項獲得資訊,進行其他的操作。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # encoding: UTF-8 import re # 將正則表示式編譯成Pattern物件 pattern= re.compile(r'hello') # 使用Pattern匹配文字,獲得匹配結果,無法匹配時將返回None match= pattern.match('hello world!') if match: # 使用Match獲得分組資訊 print match.group() ### 輸出 ### # hello

re.compile(strPattern[, flag]):

這個方法是Pattern類的工廠方法,用於將字串形式的正則表示式編譯為Pattern物件。 第二個引數flag是匹配模式,取值可以使用按位或運算子'|'表示同時生效,比如re.I | re.M。另外,你也可以在regex字串中指定模式,比如re.compile('pattern', re.I | re.M)與re.compile('(?im)pattern')是等價的。 
可選值有:

  • re.I(re.IGNORECASE): 忽略大小寫(括號內是完整寫法,下同)
  • M(MULTILINE): 多行模式,改變'^'和'$'的行為(參見上圖)
  • S(DOTALL): 點任意匹配模式,改變'.'的行為
  • L(LOCALE): 使預定字元類 \w \W \b \B \s \S 取決於當前區域設定
  • U(UNICODE): 使預定字元類 \w \W \b \B \s \S \d \D 取決於unicode定義的字元屬性
  • X(VERBOSE): 詳細模式。這個模式下正則表示式可以是多行,忽略空白字元,並可以加入註釋。以下兩個正則表示式是等價的:
1 2 3 4 a= re.compile(r"""\d +  # the integral part \.    # the decimal point \d *  # some fractional digits""", re.X) b= re.compile(r"\d+\.\d*")

re提供了眾多模組方法用於完成正則表示式的功能。這些方法可以使用Pattern例項的相應方法替代,唯一的好處是少寫一行re.compile()程式碼,但同時也無法複用編譯後的Pattern物件。這些方法將在Pattern類的例項方法部分一起介紹。如上面這個例子可以簡寫為:

1

相關推薦

Python表示式指南 (:AstralWind)

原文戳這裡 1. 正則表示式基礎 1.1. 簡單介紹 正則表示式並不是Python的一部分。正則表示式是用於處理字串的強大工具,擁有自己獨特的語法以及一個獨立的處理引擎,效率上可能不如str自帶的方法,但功能十分強大。得益於這一點,在提供了正則表示式

Python表示式指南

本文介紹了Python對於正則表示式的支援,包括正則表示式基礎以及Python正則表示式標準庫的完整介紹及使用示例。本文的內容不包括如何編寫高效的正則表示式、如何優化正則表示式,這些主題請檢視其他教程。 注意:本文基於Python2.4完成;如果看到不明白的詞彙請記得百度

常用表示式bobby的專欄)

匹配中文字元的正則表示式: [u4e00-u9fa5]評註:匹配中文還真是個頭疼的事,有了這個表示式就好辦了 匹配雙位元組字元(包括漢字在內):[^x00-xff]評註:可以用來計算字串的長度(一個雙位元組字元長度計2,ASCII字元計1) 匹配空白行的正則表示式:ns*r評

Python表示式操作指南

  原文作者:A.M. Kuchling ([email protected]) 校對人員:Leal 適用版本:Python 1.5 及後續版本 文章狀態:校對階段 Abstract(摘要) This document

python表示式判斷文字中是否有中文

原址如下: http://outofmemory.cn/code-snippet/2818/python-regular-expression-decide-text-shifou-exist-zhongwen python正則表示式判斷文字中是否有中文 pyth

Python字元編碼與表示式指南

1. 字元編碼簡介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一種單位元組的編碼。計算機世界裡一開始只有英文,而單位元組可以表示256個不同的字元,可以表示所有的英文字元和許多

Python表示式的簡單應用和示例演示

前一陣子小編給大家連續分享了十篇關於Python正則表示式基礎的文章,感興趣的小夥伴可以點選連結進去檢視。今天小編給大家分享的是Python正則表示式的簡單應用和示例演示,將前面學習的Python正則表示式做一個概括。 下面的栗子是用於提取高考日期,一般來說,我們填寫日期都會寫2018年6月7日,但

Python表示式初識(九)

繼續分享Python正則表示式的基礎知識,今天給大家分享的特殊字元是[\u4E00-\u9FA5],這個特殊字元最好能夠記下來,如果記不得的話通過百度也是可以一下子查到的。 該特殊字元是固定的寫法,其代表的意思是漢字。換句話說,只要字元中是漢字,就可以通過該字元進行匹配,該特殊字元也是用中括號括起來的。

Python 表示式:compile,match

本文以匹配×××ID為例,介紹re模組的compile與match的用法 複雜匹配 = re.compile(正則表示式): 將正則表示式例項化              +       

Python 表示式模組詳解

由於最近需要使用爬蟲爬取資料進行測試,所以開始了爬蟲的填坑之旅,那麼首先就是先系統的學習下關於正則相關的知識啦。所以將下面正則方面的知識點做了個整理。語言環境為Python。主要講解下Python的Re模組。 下面的語法我就主要列出一部分,剩下的在python官網直接查閱即可:docs.python.org

Python 表示式:search

本文介紹re模組的search的用法 複雜匹配 = re.compile(正則表示式): 將正則表示式例項化              +         re.search(

Python | 表示式的常見用法

正則表示式的常見用法分為兩塊內容,第一部分是一般具有正則的高階語言都支援的功能,第二部分講解Python所獨特具備的正則特性。   Part 1 正則表示式是由普通字元(例如字元a到z)以及特殊字元(稱為“元字元”)組成的文字模式。模式用於在搜尋文字時要匹配一個或多個字串。

python 表示式找出字串中的純數字

1、簡單的做法 >>> import re >>> re.findall(r'\d+', 'hello 42 I'm a 32 string 30') ['42', '32', '30'] 然而,這種做法使得字串中非純數字也會識別 >

python 表示式 簡介

python 正則表示式 簡介 1.正則表示式:描述字串排列的一套規則 2.可以使用正則表示式提取出所有滿足規則的字串 3.在python中使用re模組是實現在python正則表示式的功能 正則表示式的基礎知識: 1.原子 2.元字元 3.模式修正 原子 :原子是正則表示式中最基

Python 表示式:findall

本文以匹配×××IP為例,介紹re模組的findall的用法: 返回值->列表 複雜匹配 = re.compile(正則表示式): 將正則表示式例項化              +      &

Python表示式:re模組

正則表示式: 使用單個字串來描述、匹配一系列匹配某個句法規則的字串正則表.通常被用來檢索、替換那些符合某個模式(規則)的文字.python自1.5起提供了re模組,它提供了perl風格的正則表示式. re模組簡介 re.match函式 功能 嘗試從字串的起始位置開始匹配一個模式,如

Python 表示式:sub

作用:替換字串中的某字串 本文以 ‘×××’掩蓋手機號部分數字 為例,介紹re模組的sub的用法: 返回值 -> 列表 複雜匹配 = re.compile(正則表示式): 將正則表示式例項化              +&n

python表示式學習筆記

正則表示式 學習資源:https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books-zh.md 正則表達例子: |    A|B 

python 表示式匹配特定浮點數

  def is_decimal(num): import re    #以數字開頭,小數點後保留1位數字或兩位數字或者沒有小數部分 dnumre = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""") result = d

python--表示式的實戰

正則表示式是在re模組裡的,所以需要事前匯入re模組,re模組裡面的search()方法用於在字串中搜索正則表示式模式第一次出現的位置。 注意:下標從0開始,原字串前面需要加入r'原字串' 上圖因為.號可以匹配除了換行符之外的任何字元,所以它匹配了I,也就是第一個字元