Python基礎 :Regex

來源:互聯網
上載者:User

標籤:包括   換行   url   app   .com   detail   blank   字串替換   轉義   

一、前言

1.1Regex簡述

Regex是一種尋找以及字串替換操作。Regex在文字編輯器中廣泛使用,比如Regex被用於:

  1.檢查文本中是否含有指定的特徵詞

  2.找出文中匹配特徵詞的位置

  3.從文本中提取資訊,比如:字串的子串

  4.修改文本

與文字編輯器相似,幾乎所有的進階程式設計語言都支援Regex。在這樣的語境下,“文本”也就是一個字串,可以執行的操作都是類似的。一些程式設計語言(比如Perl,JavaScript)會檢查Regex的文法。

 

1.2 常用的正則匹配工具 

線上匹配工具:

  1. http://www.regexpal.com/ 

      2. http://rubular.com/ 

正則匹配軟體:

      McTracer 

      用過幾個之後還是覺得這個是最好用的,支援將正則導成對應的語言如java C# js等還幫你轉義了,Copy直接用就行了很方便,另外支援把Regex用法解釋,如哪一段是捕獲分組,哪段是貪婪匹配等等,總之用起來 So Happy .

 

1.3Regex文法

  \w匹配字母數字及底線

  \W匹配非字母數字及底線

  \s匹配任意空白字元,等價於 [\t\n\r\f].

  \S匹配任意非Null 字元

  \d匹配任一數字,等價於 [0-9]

  \D匹配任意非數字

  \A匹配字串開始

  \Z匹配字串結束,如果是存在換行,只匹配到換行前的結束字串

  \z匹配字串結束

  \G匹配最後匹配完成的位置

  \n匹配一個分行符號

  \t匹配一個定位字元

  ^匹配字串的開頭

  $匹配字串的末尾。

  .匹配任一字元,除了分行符號,當re.DOTALL標記被指定時,則可以匹配包括分行符號的任一字元。

  [...]用來表示一組字元,單獨列出:[amk] 匹配 ‘a‘,‘m‘或‘k‘

  [^...]不在[]中的字元:[^abc] 匹配除了a,b,c之外的字元。

  *匹配0個或多個的運算式。

  +匹配1個或多個的運算式。

  ?匹配0個或1個由前面的Regex定義的片段,非貪婪方式

  {n}精確匹配n個前面運算式。

  {n, m}匹配 n 到 m 次由前面的Regex定義的片段,貪婪方式

  a|b匹配a或b

  ( )匹配括弧內的運算式,也表示一個組

可能完了之後就有點暈暈的了把,不用擔心,下面我們會詳細講解下一些常見的規則的用法。怎麼用它來從網頁中提取我們想要的資訊。

 

1.4Python中使用

其實Regex不是Python專屬的,它在其他程式設計語言中也可以使用,但是Python的re庫提供了整個Regex的實現,利用re庫我們就可以在Python中使用Regex來,在Python中寫Regex幾乎都是用的這個庫。

下面我們就來瞭解下它的用法。

match()

在這裡首先介紹第一個常用的匹配方法,match()方法,我們向這個方法傳入要匹配的字串以及Regex,就可以來檢測這個Regex是否匹配字串了。

match()方法會嘗試從字串的起始位置匹配Regex,如果匹配,就返回匹配成功的結果,如果不匹配,那就返回None。

我們用一個執行個體來感受一下:

import recontent =‘Hello 123 4567 World_This a Regex Demo‘print (len(content))result = re.match(‘^Hello\s\d\d\d\s\d{4}\s\w{10}‘,content)print resultprint result.group()print result.span()

輸出結果:

在這裡我們首先聲明了一個字串,包含英文字母、空白字元、數字等等內容,接下來我們寫了一個Regex^Hello\s\d\d\d\s\d{4}\s\w{10}來匹配這個長字串。

開頭的^是匹配字串的開頭,也就是以Hello開頭,然後\s匹配空白字元,用來匹配目標字串的空格,\d匹配數字,三個\d匹配123,然後再寫一個\s匹配空格,後面還有4567,我們其實可以依然用四個\d來匹配,但是這麼寫起來比較繁瑣,所以在後面可以跟{4}代表匹配前面的字元四次,也就是匹配四個數字,這樣也可以完成匹配,然後後面再緊接一個空白字元,然後\w{10}匹配10個字母及底線,Regex到此為止就結束了,我們注意到其實並沒有把目標字串匹配完,不過這樣依然可以進行匹配,只不過匹配結果短一點而已。

我們調用match()方法,第一個參數傳入了Regex,第二個參數傳入了要匹配的字串。

列印輸出一下結果,可以看到結果是SRE_Match對象,證明成功匹配,它有兩個方法,group()方法可以輸出匹配到的內容,結果是Hello 123 4567 World_This,這恰好是我們Regex規則所匹配的內容,span()方法可以輸出匹配的範圍,結果是(0, 25),這個就是匹配到的結果字串在原字串中的位置範圍。

通過上面的例子我們可以基本瞭解怎樣在Python中怎樣使用Regex來匹配一段文字。

二、Regex練習

          初級練習

                   1、求非負整數 : ^\d+$

                       Tips:需要注意的是這個匹配模式為多行模式下進行的

             

                  2、匹配正整數: ^[1-9]*[1-9][0-9]*$ 在網上也有這種寫法的 ^[0-9]*[1-9][0-9]*$

                      這裡我也不貼了,前者指能匹配123012這種整數,而後者可以匹配001230。

                       取捨就看實際的需要了

                  3、非正整數:^(-\d+|(0+))$

                  4、負整數:^-[0-9]*[1-9][0-9]*$  

                  5、整數 :^-?\d+$

                  6、非負浮點數 :^\d+(\.\d+)?$

                  7、正浮點數 :^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

                  8、非正浮點數 :^((-\d+(\.\d+)?)|(0+(\.0+)?))$

                  9、負浮點數:^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$

                 10、浮點數:^(-?\d+)(\.\d+)?$

                 11、有數字、26個英文字母組成的字串:^[A-Za-z0-9]+$

          中級練習

 

                   1、長度為8-10的使用者密碼(以字母開頭、數字、底線)

                        ^[a-zA-Z]\w{7,10}$

                   2、驗證輸入只能是漢字 : ^[\u4e00-\u9fa5]{0,}$

                   3、電子郵箱驗證:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

                   4、URL地址驗證:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

                   5、電話號碼的驗證:請參考:http://blog.csdn.net/kiritor/article/details/8733469

                   6、簡單的社會安全號碼驗證:\d{15}|\d{18}$

                   ..............................          

          進階練習

                  1、提取並捕獲html標籤內容:

                     <a(?: [^>]*)+href=([^ >]*)(?: [^>]*)*>

               

                    <OPTION\s.*?>

               

以上練習是參考網上的。寫的不好之處,請大家多多指教。

Python基礎 :Regex

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.