天天看點

python 之 re

一、正規表達式

    正規表達式,又稱正規表示法、正常表示法(Regular Expression)

二、正規表達式描述字元

     在正規表達式中,直接給出字元,就是精确比對。

     用\d可以比對一個數字,\w可以比對一個字母或數字。如:

     ‘444\d可以比對 4448,但不能比對ooA

     \d\d\d可以比對020

     \w\w\w可以比對py2

      . 可以比對任意字元,是以:

  比對 變長的字元,在正規表達式中,用*表示任意個字元(包括0),+表示至少一個字元,用?表示0個或者1個字元  {n},表示n個字元,{n,m}表示n-m個字元。如:

<code>\d{3}</code>表示比對3個數字,例如<code>'010'</code>;

<code>\s</code>可以比對一個空格(也包括Tab等空白符),是以<code>\s+</code>表示至少有一個空格,例如比對<code>' '</code>,<code>' '</code>等;

<code>\d{3,8}</code>表示3-8個數字,例如<code>'1234567'</code>。

三、re子產品

   1、re.match()表示比對,如果成功,傳回一個match對象,否則。

   2.re.split()切分字元串,注無法識别連續的空格

   3.貪婪比對

最後需要特别指出的是,正則比對預設是貪婪比對,也就是比對盡可能多的字元。舉例如下,比對出數字後面的<code>0</code>:

由于<code>\d+</code>采用貪婪比對,直接把後面的<code>0</code>全部比對了,結果<code>0*</code>隻能比對空字元串了。

必須讓<code>\d+</code>采用非貪婪比對(也就是盡可能少比對),才能把後面的<code>0</code>比對出來,加個<code>?</code>就可以讓<code>\d+</code>采用非貪婪比對:

當我們在Python中使用正規表達式時,re子產品内部會幹兩件事情:

編譯正規表達式,如果正規表達式的字元串本身不合法,會報錯;

用編譯後的正規表達式去比對字元串。

如果一個正規表達式要重複使用幾千次,出于效率的考慮,我們可以預編譯該正規表達式,接下來重複使用時就不需要編譯這個步驟了,直接比對:

編譯後生成Regular Exp