python 基礎學習 Regex1(規則)

來源:互聯網
上載者:User

標籤:python 正則

Regex:

*正則表示式(或RE)是一種小型的、高度專業化的程式設計語言,(在python中)它內嵌在python中,並通過re模組實現。

    -可以為想要匹配的相應字串指定規則

    -該字串集可能包含英文語句、e-mail地址、命令或任何你想要的東西

    -可以問諸如“這個字串匹配該模式嗎?”

    -“在這個字串中是否有部分匹配該模式呢?”

    -你也可以使用re以各種方式來修改或分隔字串

*Regex模式被編譯成一系列的位元組碼,然後由用c編寫的匹配引擎執行

*Regex語言相對小型和受限(功能有限)

    -並非所有字串處理都能用Regex完成

*字元匹配

    -一般字元

        -大多數字母和字元一般都會和自身匹配

        -如Regextest會和字串"test“完全符合

    -元字元

        . ^ $ * + ? {} \ | ( )

=============================================================

.[]

    -常用來指定一個字元集:[abc];[a-z]

    -元字元在字元集中不起作用:【akm$】

    -補集匹配不在區間範圍內的字元:【^5】

範例:

>>> import re#在python中如果想使用正則表示式,需先匯入re模組,re模組中有許多方法#定義Regex其實就是定義一個字串 :s = "abc" ,但這個沒有任何意義#通常定義運算式時要加一個r : s = r"abc" 來定義這個Regex的字串>>> s = r"abc"      #這個可以理解為規則>>> re.findall(s,‘aaaaaaa‘)[]#re.findall方法將規則s比較字串‘aaaaaaa‘,因為沒有abc,所以返回為空白>>> re.findall(s,‘abcddabc‘)[‘abc‘, ‘abc‘]#最原始的匹配,通過一般字元匹配到自身>>> st = "top tip tqp twp tep">>> s = r"top">>> re.findall(s,st)[‘top‘]>>> s = r"t[oe]p">>> re.findall(s,st)[‘top‘, ‘tep‘]#【制定一個字元集】 t開頭,p結尾,中間是o或e中的一個>>> s = r"t[^oe]p">>> re.findall(s,st)[‘tip‘, ‘tqp‘, ‘twp‘]【^匹配不在區間範圍內的字元】,取反

.^

    -匹配行首。除非設定MULTILINE標誌,它只是匹配字串的開始,在MULTILINE模式裡,它也可以直接匹配字串中的每個換行。

>>> s = r‘hello‘>>> b = ‘hello world,hello boy‘>>> re.findall(s,b)[‘hello‘, ‘hello‘]>>> s = r‘^hello‘                   >>> re.findall(s,b)[‘hello‘]>>> b = ‘ world,hello boy‘>>> re.findall(s,b)[]【^表示行首】


.$

    -匹配行尾,行尾被定義為要麼是字串尾,要麼是一個換行字元後面的任何位置。

>>> s = r‘boy$‘>>> re.findall(s,b)[‘boy‘]

#注意【】中出現元字元    元字元在字元集中不起作用

>>> t = r‘t[abc$]‘    #匹配以a 或b 或c 為結尾的字串>>> re.findall(t,‘ta‘)[‘ta‘]>>> re.findall(t,‘t$‘)[‘t$‘]                         #未生效>>> t = ‘t[^ab]‘>>> re.findall(t,‘ab‘)[]                               #取反>>> r = ‘t[abc^]‘>>> re.findall(r,‘t^‘)[‘t^‘]

更多用法:匹配一個範圍,寫法[0-9]、[a-zA-Z]\[a-zA-Z0-9]

>>> s = r‘x[0123456789]x‘>>> l = ‘x1x x22x xxx‘>>> re.findall(s,l)[‘x1x‘]>>> s = r‘x[0-9]x‘>>> re.findall(s,l)[‘x1x‘]

.\逸出字元

    -反斜線後面可以加不同的字元以表示不同特殊意義

    -也可以用於取消所有的元字元:\[ 或\\

        \d 匹配任何十進位數: 相當於類[0-9]

        \D 匹配任何非數字字元:相當於類[^0-9]

        \s 匹配任何空白字元:它相當於類[\t\n\r\f\v]

        \S 配配任何非空白字元: 它相當於類[^\t\n\r\f\v]

        \w匹配任何字母數字字元:它相當於類[a-zA-Z0_9_]

        \W匹配任何字母數字字元:它相當於類[^a-zA-Z0_9_]

範例:

>>> s = r‘x\dx‘>>> l = ‘x1x x22x xxx‘>>> re.findall(s,l)[‘x1x‘]#如有多次重複可以使用{次數}>>> r=r"010-\d\d\d\d\d\d\d\d">>> re.findall(r,‘010-87568745‘)[‘010-87568745‘]>>> r=r"010-\d{8}">>> re.findall(r,‘010-87568745‘)[‘010-87568745‘]>>> re.findall(r,‘010-8756874‘)[]

.重複 {次數}

    -Regex第一功能是能夠匹配不定長的字元集,另一個功能就是你可以指定Regex的一部分的重複次數

>>> import re>>> s =r‘^010-\d{8}‘>>> re.findall(s,‘010-36854625‘)[‘010-36854625‘]

.*

    -指定前一個字元可以被匹配零次或更多次,而不是只有一次。匹配引擎會試著重複儘可能多的次數(不超過整數界定範圍,20億)

>>> a=r‘ab*‘>>> re.findall(a,‘abbbbbb‘)[‘abbbbbb‘]>>> re.findall(a,‘a‘)[‘a‘]

.+

    -表示匹配一次或更多次

    -注意*和+之間的不同;*零次到多次。+至少一次;

>>> a=r‘ab+‘>>> re.findall(a,‘accccccccb‘)[]>>> re.findall(a,‘accccccccbab‘)[‘ab‘]

.?

    -表示將前一個符號重複0次或1次

    #用於表示某事物是可選的。

>>> s=r‘^010-?\d{8}$‘>>> re.findall(s,‘010-12345678‘)[‘010-12345678‘]>>> re.findall(s,‘01012345678‘)[‘01012345678‘]>>> re.findall(s,‘01012345678abc‘)#此處同時需要注意$的使用

.+?

    -最小匹配模式

>>> s=r‘ab‘>>> re.findall(s,‘abbbbababb‘)[‘ab‘, ‘ab‘, ‘ab‘]

.{m,n}

    -其中m和n是十進位整數。該限定符的意思是至少有m個重複,至多到n次重複。

>>> s=r‘ab‘>>> re.findall(b,‘abbbbbababb‘)[‘abbb‘, ‘ab‘, ‘abb‘]

    -忽略m會認為下邊界是0,而忽略n的結果將是上邊界為無窮大(實際上是20億)

    -{0,}等同於*,{1,}等同於+,而{0,1}則與?相同

>>> s=r‘ab{1,}‘>>> d=r‘ab+‘>>> re.findall(s,‘abbbbababb‘)[‘abbbb‘, ‘ab‘, ‘abb‘]>>> re.findall(d,‘abbbbababb‘)[‘abbbb‘, ‘ab‘, ‘abb‘]


本文出自 “思想大於技術” 部落格,謝絕轉載!

python 基礎學習 Regex1(規則)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.