正則表達式

正則表達式,Regular Expression ,縮寫爲regex regexp、RE等python

在編程中,最常打交道的就是字符串,處理最多的就是字符串,正則表達式

正則表達式是文本處理領域最經常使用的技術,對字符串按照某種規則檢索,或者替換字符串編程

分類:vim

BRE :基本的正則表達式,grep、sed、vi等軟件支持,vim有擴展socket

ERE : 擴展的正則表達式,egrep(rgrep-E),sed-r等code

PCRE : (Perl Compatible Regular Expressions),幾乎全部語言都是PCRE的方言或變種,Python從1.6開始使用SRE正則表達式引擎,能夠理解爲PCRE的子集,見模塊re。regexp

 

基本語法ip

元字符 metacharacter字符串

.點,匹配除換行符外的任意一個字符,在Windows下回車換行是兩個\r\n,有時正則表達式會留下一個回車,處理時要注意it

[abc] 匹配一個字符,包含在集合中的任意一個字符,[abc]匹配plain中的a

[^abc]除abc外的一個字符,只匹配一個,匹配plain中的'p','l','i','n'

[a-z] 字符範圍,也是一個集合,只匹配一個字符

[^a-z] 字符範圍,也是一個集合,只匹配一個字符,除其中的字符

\b 匹配單詞的邊界,\bb表示在文本找到b開頭的單詞,b\b爲以b結尾的

\B 匹配不是字符的邊界的字符,

\d 匹配[0-9]中的一位

\D 匹配一位非數字

\s 匹配一位空字符

\S 匹配一位非空白字符

\w 匹配[a-zA-Z0-9_],包括中文的字,不匹配符號,支持uncode字符,匹配時注意行尾的回車換行,

\W 一位非文字

\\,\n,\r 原意,加轉義符來表達原意

多位匹配貪婪模式,匹配找到的最長的字符

* 屢次匹配,零或者以上任意次 ,使用.*是注意範圍,模式會影響找到的內容,單行模式有可能找到的並非你要的,

+ 至少一個,{1,}

? 有無{0,1}

{n} 固定重複次數

{n,}  重複n次及以上

{0,} 至關於*,{1,}至關於+

{n,m} {0,1} n要小於m

 

x|y 匹配 x或者y 注意w|food 和(w|f)ood 的區別,前者會找到w,food

() 分組,或者捕獲,使用捕獲後會自動分配組號,從1開始,能夠改變優先級,匹配帶來分組,沒有匹配到就不會有分組

(very)\s+\1 引用分組號\1, \s+表示中間空白字符一個以上

(?:w|f)ood 表示括號改變優先級,不分組

((?:w|f)ood) 表示分組組名food,wood

(?:<name>exp) python中使用(?P<head>w|f)ood 命名分組

零寬斷言

斷言不是分組

f(?=ood) (?:=)斷言只是條件,不參與匹配,匹配f,ood是條件

(?<=f)ood 匹配ood,f只是條件

負向零寬斷言

(?!) 斷言f(?!ood)f後必定不是ood,

(?<!)

(?#commend) 註釋,少用。寫在表達式先後

 

分組和捕獲意思相同

使用時,能用簡單就不用複雜

 

貪婪和非貪婪,

捕獲的內容或匹配的內容不一樣

(.*?) 找到的內容,非貪婪

*? 匹配任意次,儘量少

??

+?

{2,}? 至關於{2}

?? 和*? 單獨使用沒有意義,找啥?

加在重複的選項上

 

引擎的選項

ignoreCase 忽略大小寫

Singleline

Mulitline

 

單行模式能夠突破換行符,控制的是換行符,控制的是點可否匹配到換行符

. 點能夠匹配包括換行符的字符

^ $ 表示整個字符串的開頭和結尾

 

多行模式

. 匹配除換行符外的全部字符

^$ 控制行首行尾,多行匹配行首尾

結尾註意\n\r 加\r?,win下有問題

 

socket 庫,篩選ip地址

從分組組名中提取數據

分隔符取反

你想要的數據中(最不可能出現的值能夠做爲你取反的值)來求你要的值

 

 


取1-999的數字
[1-9]\d|[1-9]\d|\d
[1-9]?\d\d?
\b(?!0)\d{1,3}\b

25[0-5]|2[0-4]2[0-4]|1\d{0,2}|0

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息