python筆記-Regex

來源:互聯網
上載者:User

標籤:大小   http   分享圖片   字元   class   dma   ase   第一個   list   

  • 什麼是Regex:

Regex是一個特殊的字元序列,能協助我們方便的檢查一個字串是否與某種模式比對(定義往往都很枯燥) 

也稱之為”模式“,即可用於檢查一個給定的字串是否符合某種模式

 舉例:

我們定義一個模式,平常經常用到的日期模式:XXXX-XX-XX,2018-03-10

 在Regex的模式定義文法裡:\d用來指定一個數字,因此我們將日期的Regex的模式定義成:”\d\d\d\d-\d\d-\d\d" 

  • 什麼是元字元:

元字元是一些在Regex中有特殊用途、不代表它本身字元意義的一組字元

 利用元字元,我們可以控制字元串匹配的方式

 比如上例中的\d,用來指定一個數字,"相當於[0-9],匹配任何單個的數字字元",而非d字母本身

  • 元字元各自含義

     Regex的完整元字元及各自的含義(主要有11個): 

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

我們選挑重要的依次進行解釋

1.[ ] 方括弧

(1) 常用來指定一個字元集,如[abcd]匹配:a或b或c或d

(2) 元字元在”[]”中不起所用,比如:[a+]匹配:a或+ 

(3) 補集匹配:[^a],匹配非a的一個字元

(4) 匹配連續字元:[a-zA-Z0-9],匹配大小寫英文字母和數字

2.^

匹配行首,直接匹配字串中的每一個換行

3.$

匹配行尾,行尾是指:字串尾,或一個換行字元後的任何位置

4.\

逸出字元,如果要匹配”\”本身,需要使用再次轉義:”\\”

一些特殊字元:

\d:匹配:[0-9]

\D:匹配:[^0-9],與 \d 相反,匹配任何非十進位數位字元

\s:匹配:任何空白符,即:[\t\n\r\f\v]

\S:匹配:任何非空白符,即:[^\t\n\r\f\v]

\w:匹配:[a-zA-Z0-9_ ],即匹配任何字元

\W:匹配:[^a-zA-Z0-9_ ],與\w相反

5. *

匹配前一個字元或子運算式出現0次或多次

例如:ca*t 將匹配 ct(0 個字元 a),cat(1 個字元 a),caaat(3 個字元 a)

6. +

匹配前一個字元或子運算式出現1次或多次

例如: ca+t 會匹配 cat 和 caaat,但不會匹配 ct。

7.?

匹配前一個字元或子運算式出現1次或0次

例如 :大?帥哥 可以匹配 大帥哥,也可以匹配 帥哥。

8.{ }

匹配前一個字元或子運算式出現指定次數(即代表重複)

{0,}:0次或多次,相當於”*”

{1,}:1次或多次,相當於”+”

{0,1}:0次或1次,相當於”?”

{m,n}:m次到n次(m <= n),m是最少重複的次數,n是最多重複的次數

9.  .

匹配除分行符號以外的任意一個字元

10. |   

每一種條件匹配一次,且"|"和"[]"效果是相同的,返回形式一樣

例如:

>>> print (re.findall(r"[abc]","abc"))

[‘a‘,‘b‘,‘c‘]

>>> print (re.findall(r"[a|b|c]","abc"))

[‘a‘,‘b‘,‘c‘]

11. ( )

圓括弧分組匹配使得匹配返回元組

例如:

>>> print (re.findall(r"one two three four five six",a))

[‘one two three four five six‘]

>>> print (re.findall(r"(one) (two) (three) (four) (five) (six)",a))

[ ]返回空

  • python語言中的re模組

在python語言中,re模組用於提供Regex的全部功能,而re模組中最重要的兩個函數是match()和re.search()

re.match()簡介

格式:re.match(pattern,string,flag=0),

第一個參數pattern用於傳入需要匹配的模式定義字串

第二個參數string用於傳入被匹配和檢查的字串內容

第三個flag用於傳入標識,如是否區分大小寫

例1:

import re

print(re.match("\d\d\d\d-\d\d-\d\d","2018-03-09"))

運行結果:<_sre.SRE_Match object; span=(0, 10), match=‘2018-03-09‘>

代表2018-03-09符合我們定義的日期模式

例2:

import re

print(re.match("\d\d\d\d-\d\d-\d\d","2018-3-9"))

運行結果:NONE

代表不符合

思考一下,如何既滿足符合一個數位月份和日又符合兩個數位月份和日(見例3)

例3:

import re

print(re.match("\d\d\d\d-\d{1,2}-\d{1,2}","2018-3-9")) 

如果看不懂,請返回到上節8.{}介紹部分

 例4:

再思考一下,下面的代碼

import re

print(re.match("\d{4}-\d{1,2}-\d{1,2}","2018-3-9"))

例5:

思考一下,下面的代碼(可先看一下上一節\s和*的含義)

imprt re

print(re.match("\s*\d{4}-\d{1,2}-\d{1,2}","   2017-05-08")

 代碼是為了相容日期前面如果出現多個空格的情況使用 \s*

例6:

import re

print(re.match("Dehom","Dehom Wang"))

 迴歸最簡單模式就是字串本身,這很重要

 

補充知識:

Python中字串前面加上 r 表示原生字串,(r=raw)

Python裡的原生字串很好地解決了需要\逸出字元這個問題,例如匹配一個數位"\\d"可以寫成r"\d"。有了原生字串,不用擔心是不是漏寫了反斜線,寫出來的運算式也更直觀

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.