Python程式設計之正規表示式 1

2021-10-03 04:06:13 字數 3824 閱讀 6352

1.正規表示式語法知識

①常見正規表示式使用字元及其含義

.

#匹配除換行符之外的任意單個字元

*#匹配位於*之前的字元或子模式的0次或多次出現

+#匹配位於+之前的字元或子模式的1次出現或多次出現

-#用於之中表示範圍

|#匹配位於|之前或之後的字元

^#匹配行首,匹配以^後面的字元為開頭的字串,類似於^···

$ #匹配行尾,匹配以$之前的字元結束的字串,類似於···$

? #匹配位於"?"之前的0個或1個字元,如果?字元緊接其他限定符(*、+、?、、、)之後,即匹配模式服從「非貪心模式」,例如"o+?"只匹配乙個o;反之則為匹配方法為「貪心模式」,例如"oooo"中o+匹配所有o

\ #表示位於\之後的轉義字元

\num #此處的num為乙個正整數,例如,"(.)"\1匹配連續兩個相同的字元

\f #換頁符匹配

\n #換行符匹配

\r #匹配乙個回車

\b #匹配單詞頭或單詞尾

\b #匹配單詞主體(與/b相反)

\d #匹配任何數字,相當於[0-9]

\d #與\d意義相反,相當於[^0-9]

\s #匹配任何空白字元,包括空格、製表符、換頁符,與[\f\n\r\t\v]

\s #與\s意義相反

\w #匹配任何字母、數字及下劃線,相當於[a-za-z0-9_]

\w #與\w意義相反,相當於[^a-za-z0-9]()

#將位於()內的內容作為乙個整體來對待

#按{}中的次數來進行匹配

#匹配位於中的任意乙個字元

[^xyz]

#反向字符集,匹配除x,y,z之外的字元

[a-z]

#字元範圍,匹配指定範圍內的所有字元

[^a-z]

#反向字元範圍,匹配指定範圍之外的所有字元

注意:如果以"「開頭的元字元與字元相同,則需要使用」\「或者原始字串,在字串前面加上"r"或"r」。原始字串可以減少使用者得輸入,主要用於正規表示式和檔案路徑字串,如果字串以"「結束,則需要修改為」\"結束。

②具體使用形式

最簡單的正規表示式是普通字串,可以匹配自身

'[pjc]ython'

#可以匹配'python'、'jython'、'cython'

'python|perl'

or'p(ython|erl)'

#可以匹配python或perl

#子模式後面加上?號表示可選,可以選的是?前面的字元

#只匹配以http開頭的字元

'(pattern)*'

#允許模式重複0次或多次

'(pattern)+'

#允許模式重複1次或多次

'(pattern)'

#允許模式重複n~m次

'(a|b)*c'

#匹配a或b(0個或多個),後面緊跟乙個c

'^[0-9][a-za-z-.]$'

#匹配長度為(1+2)~(1+5)的且以數字開頭的,可帶字母或者"-"、"."的字串

'^\d\.\d\.\d\.\d$'

#檢查字串是否為ip位址

'^\w+@(\w+\.)+\w+$'

#檢查是否為合法郵件位址

'[\u4e00-\u9fa5]'

#匹配字串中所有漢字

'\d|\d'

#判斷是否為身份證格式

'\d-\d\-d'

#匹配年月日

'^(?=.*[a-z])(?=.*[a-z])(?=.*\d)(?=.*[,._]).$'

#檢查給定字元是否為強密碼,必須同時包含大寫字母,小寫字母,數字,或特殊字元(如英文逗號,英文句號,下劃線),長度要超過8位

"(?!.*[\'\"\/;=]).+"

#匹配字元不能包含'、"、/、;、=否則匹配失敗

'(.)\\1+'

#匹配任意字元的一次出現或多次重複出現

③子模式

(?p

)#為子模式命名

(?ilmsux)

#設定匹配標誌,可以是幾個字母的組合,每個字母含義與編譯標誌相同

(?:...

)#匹配但不捕獲該匹配的子表示式

(?p=groupname)

#表示在此之前命名為groupname的子模式

(?#...) #表示注釋

(?=...

)#用於正規表示式之後,表示如果=後的內容在字串**現則匹配,但不返回=之後的內容

(?!..)

#用於正規表示式之後,表示如果!後的內容在字串**現則匹配失敗,不返回!之後的內容

(?<=..

.)#用於正規表示式之前,與(?=...)含義相同

(?)#用於正規表示式之前,與(?!...)含義相同

④re模組主要方法

python中主要使用re模組來實現正規表示式的操作,常見方法如下:

import re

compile

(pattern[

,flags]

)#建立模式物件

search(pattern,string[

,flags]

)#在整個字元中尋找模式,返回match物件或none

match(pattern,string[

,flags]

)#從字串的開始處匹配模式,返回match物件或則none

findall(pattern,string[

,flags]

)#列出字串中模式的所有匹配項

split(pattern,string[

,maxsplit=0]

)#根據模式匹配項分割字串

sub(pat,repl,string[

,count=0]

)#將字串中所有pat的匹配項有repl替換

escape(string)

#將字串中所有特殊正規表示式字元轉義

flags的值可以為re.i(忽略大小寫)、re.l、re.m(多行匹配模式)、re.s(使元字元".「可以匹配任意字元,包括換行符)、re.u(匹配unicode字元)、re.x(忽略模式中的空格,並使用#注釋)的不同組合,使用」|"分隔開。

#案例1-使用正規表示式刪除字元中多餘的空白

import re

s='h h '

re.sub(

'\s+'

,' '

,s)#使用re模組中的字元替換會保留末尾的空白符號

>>

>

'h h '

re.split(

'[\s]+'

,s)>>

>

['h'

,'h',''

]re.split(

'[\s]+'

,s.strip())

#同時刪除了末尾的空白

>>

>

['h'

,'h'

]re.sub(

'\s+'

,' '

,s.strip())

>>

>

['h'

,'h'

]s.split(

)#可以不使用正規表示式

>>

>

['h'

,'h'

]

案例精選:

謝謝**!

shell程式設計之正規表示式

1 正規表示式 其實就是一種規範,也就是模式,約束字串等符合什麼樣的格式,比如要求字串必須a開頭,t結尾,符合這樣條件的字串就要用到正規表示式。2 兩套庫 gnu linux中有有兩套庫用足正規表示式程式設計,posix庫,自帶的 pcre庫,perl,功能比較全,本文採用perl。3 初體驗 eg...

linux shell 程式設計之正規表示式

grep 文字過濾工具,能夠實現根據指定的模式,逐行搜尋檔案內容,並將匹配到的行顯示出來。模式 是由正規表示式的元字元,其他字元組成的匹配條件。任意單個單個字元 匹配指定範圍的任意單個字元 匹配其前的字元0次或多次 匹配其前的字元0次或1次 與別的語言如php 正則不同的地方,主要防止 shell ...

Shell程式設計之正規表示式

1.萬用字元 2.正規表示式與萬用字元元字元作用 前乙個字元匹配0次或任意多次 匹配除了換行符外任意乙個字元 匹配行首。例如 hello會匹配以hello開頭的行 匹配行尾。例如 hello 會匹配以hello結尾的行 匹配中括號中指定的任意乙個字元,只匹配乙個字元 匹配除中括號的字元意外的任意乙個...