標籤:att strip 重疊 對象 cimage 簡單介紹 jpg 建立 匹配
前言:
什麼是Regex?
Regex(Regular expressions 也稱為 REs,或 regexes 或 regex patterns)本質上是一個微小的且高度專業化的程式設計語言。
Regex並不是Python的一部分。它被嵌入到 Python 中,並通過 re 模組提供給程式猿使用。使用Regex,你需要指定一些規則來描述那些你希望匹配的字串集合。這些字串集合可能包含英語句子、 e-mail 地址、TeX 命令,或任何你想要的字串。
展示了使用Regex進行匹配的流程:
***********************可藉助線上Regex測試來練習*************************
一、簡單介紹1、一般字元
>>>萬用字元(.)
Regex可以匹配多於一個的字串,萬用字元(.)可以匹配任何除分行符號“\n”外的字元。
例:待匹配文本:“school”
Regex:“s....l”
匹配結果:“school”
>>>轉義符(\)
逸出字元,使用後使一個字元改變原來的意思,如果字串中有字元需要匹配,可以使用(\字元)來表達。
例:待匹配文本:“W3.school”
Regex:“W3\.school”
匹配結果:“W3.school”
>>>字元集([ ])
我們可以使用中括弧([ ])括住字串來建立字元集。可以使用範圍,比如‘[a-z]’能夠匹配a到z的任意一個字元;還可以通過一個接一個的方式將範圍聯合起來使用,比如‘[a-zA-Z0-9]’能夠匹配任意大小寫字母和數字。
例:待匹配文本:“W3school”
Regex:“[a-z]”
匹配結果:“school”
Regex:“[0-9]”
匹配結果:“3”
Regex:“[A-Z]”
匹配結果:“W”
>>>反轉字元集([^ ])
可以在開頭使用^字元,比如‘[^abc]’可以匹配任何除了a、b、c之外的字元。
例:待匹配文本:“W3school”
Regex:“[^a-z]”
匹配結果:“W3”
2、預定義字元集
>>>數字(\d):匹配一個數字字元。等價於 [0-9]。
例:待匹配文本:“W3school”
Regex:“\d”
匹配結果:"3"
>>>非數字(\D): 匹配一個非數字字元。等價於 [^0-9]。
例:待匹配文本:“W3school”
Regex:“\D”
匹配結果:"Wschool"
>>>空白字元(\s): 匹配任何空白字元,包括空格、定位字元、換頁符等等。等價於 [ \f\n\r\t\v]。
例:待匹配文本:“W3 school”
Regex:“W3\sschool”
匹配結果:"W3 school"
>>>非空白字元(\S): 匹配任何非空白字元。等價於 [^ \f\n\r\t\v]。
例:待匹配文本:“W3 school”
Regex:“\S”
匹配結果:"W3school"
>>>任何單詞字元(\w): 匹配包括底線的任何單詞字元。等價於‘[A-Za-z0-9_]‘。
例:待匹配文本:“W3_school”
Regex:“\w”
匹配結果:"W3_school"
>>>>任何非單詞字元(\W): 匹配任何非單詞字元。等價於 ‘[^A-Za-z0-9_]‘。
例:待匹配文本:“[email protected]#W3school”
Regex:“\W”
匹配結果:"[email protected]#"
3、數量詞
>>>(pattern)* : 允許模式重複0次或多次
例:待匹配文本:“www.jianshu.com”
Regex:“w*\.jianshu\.com”
匹配結果:"www.jianshu.com"
>>>(pattern)+ : 允許模式重複1次或多次
例:待匹配文本:“www.jianshu.com”
Regex:“w+\.jianshu\.com”
匹配結果:"www.jianshu.com"
>>>(pattern){m,n} : 允許模式重複m~ n次
例:待匹配文本:“wwwww.jianshu.com”
Regex:“w{1,3}\.jianshu\.com”
匹配結果:"www.jianshu.com"
4、邊界匹配
>>>匹配字串開頭(^): 在多行模式中匹配每一行的開頭
例:待匹配文本:“W3school”
Regex:“^W3”
匹配結果:"W3"
>>>匹配字串末尾($): 在多行模式中匹配每一行的末尾
例:待匹配文本:“W3school”
Regex:“ool$”
匹配結果:"ool"
>>>僅匹配字串開頭(\A)
例:待匹配文本:“W3school”
Regex:“\AW3”
匹配結果:"W3"
>>>僅匹配字串末尾(\Z)
例:待匹配文本:“W3school”
Regex:“ool\Z”
匹配結果:"ool"
5、邏輯、分組
>>>管道符號(|): 左右運算式任意匹配一個。如果|沒有被包括在()中,則它的範圍是整個Regex。
例:待匹配文本:“W3school”
Regex:“W3|ol”
匹配結果:"W3 ol"
>>>分組():被括起來的運算式將作為分組,從運算式左邊開始每遇到一個分組的左括弧‘(‘,編號+1 。另外,分組運算式作為一個整體,可以後接數量詞。運算式中的|僅在該組中有效。
例:待匹配文本:“W3schoolW3school”
Regex:“(W3school){2}”
匹配結果:"W3schoolW3school"
Regex:“W3(sch|ol)”
匹配結果:"W3sch"
>>>(?P<name>...) : 分組,除了原有的編號外在指定一個額外的別名。
>>>(?P=<name>): 引用別名為<name>的分組匹配到的字串。
二、re模組
Python 自1.5版本起增加了re 模組,它提供 Perl 風格的Regex模式。re 模組使 Python 語言擁有全部的Regex功能。
re模組中一些重要的函數,如:
1、re.compile(strPattern[, flag])
這個方法是Pattern類的Factory 方法,用於將字串形式的Regex編譯為Pattern對象。 第二個參數flag是匹配模式,取值可以使用按位或運算子‘|‘表示同時生效,比如re.I | re.M。
Regex修飾符 - 可選標誌
舉例:
b=re.compile(r"\d+\.\d*", re.I | re.M)
2、re.search(pattern, string[, flags]
這個方法用於尋找字串中可以匹配成功的子串。從string的pos下標處起嘗試匹配pattern,如果pattern結束時仍可匹配,則返回一個Match對象;若無法匹配,則將pos加1後重新嘗試匹配;直到pos=endpos時仍無法匹配則返回None。pos和endpos的預設值分別為0和len(string));re.search()無法指定這兩個參數,參數flags用於編譯pattern時指定匹配模式。
re.search
3、re.split(pattern, string[, maxsplit])
按照能夠匹配的子串將string分割後返回列表。maxsplit用於指定最大分割次數,不指定將全部分割。
re.split
4、re. findall(pattern, string[, flags])
搜尋string,以列表形式返回全部能匹配的子串。
re. findall
5、re.sub(pattern, repl, string[, count])
使用給定的替換內容將匹配模式的子符串(最左端並且重疊子字串)替換掉。
re.sub
6、re.escape(string)
可以對字串中所有可能被解釋為正則運算子的字元進行轉義的應用函數。如果字串很長且包含很多特殊字元,而你又不想輸入一大堆反斜線,可以使用這個函數。
re.escape
以上
我的簡書地址:http://www.jianshu.com/u/da1677475c27
Python-Regex