Python基礎知識3:reRegex,pythonRegex
Regex(或RE)是一種小型的、高度專業化的程式設計語言,內嵌在Python中,僅做字元的匹配。
1、字元類型:
一般字元和元字元;
1)一般字元:大多數的字元和字母都會和自身匹配,比如:
t2=re.findall('ahh','yahhkkkgggtngslahh') # 匹配結果['ahh', 'ahh']
2)元字元: . ^ $ * + ? {} [] | () /
.匹配除分行符號之外的任一字元
^表示匹配字串的開始,比如^hello'匹配'helloworld'而不匹配'aaaahellobbb
$表示匹配字串末尾,可參考^
[]用來匹配一個指定的字元集。
| 或的含義。匹配|左右運算式任意一個,從左至右匹配,如果|沒有包括在()中,則它的範圍是整個Regex
*重複零次或更多次
+重複一次或更多次
?重複零次或一次
{n}重複n次,{n,}重複n次或更多次,{n,m}重複n到m次
\逸出字元,後跟元字元,則表示去除特殊功能,\後跟一般字元實現特殊功能,引用序號對應的字組所匹配的字串,主要有:
案例使用:
案例1:.匹配除分行符號之外的任一字元,一個.代表一個字元,多個.代表多個字元
案例2:^必須以字串開始
案例3:$匹配字串的結束,必須以字串結束
案例4:*匹配*前一個字元0次或無限次,比如abc*,可以是ab、abc、abcc、abcccc..等
案例5:+匹配+前一個字元1次或無限次
案例6:?匹配前一個字元0次或1次
案例7:{m}匹配前一個字元m次
案例8:{m,n}匹配前一個字元m-n次,如果m省略,則指重複0-n次,如果n省略,則指重複m-無限次
案例9:[...]字元集的字元以及轉意
字元集可以逐個列出,也可以給出範圍如[abc]或[a-c],第一個字元如果是^,則表示取反,如[^abc]表示不是abc的其他字元。所有特殊的字元在字元集中都失去其原有的特殊含義,在字元集中,如果要使用]、-或^,可以在前面加上反斜線,或把]、-放在第一個字元,把^放在非第一個字元r
其他的轉意字元:
\d 匹配任何十進位數:它相當於類[0-9]。
\D 匹配任何非數字字元:它相當於類[^0-9]
\s 匹配任何空白字元:它相當於類[\t\n\r\f\v]
\S 匹配任何非空白字元:它相當於類[^\t\n\r\f\v]
\w匹配任何字母數字字元,它相當於類[a-zA-Z0-9]
\W匹配非任何字母或數字字元,即[^\w]
\b 匹配一個單詞邊界,也就是指單詞和空格間的位置,匹配\w和\W之間,比如一些特殊的字元標點,空格等。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
B [^\b]
案例10:\b想要匹配一個單詞I,而不是單詞中包含的I
2、主要函數:
match(正則模型, 要匹配的字串, flags=0),從起始位置開始匹配,匹配成功,則返回一個對象,未匹配成功返回None,和search區別是是否從第一個位置開始。需要配合
search(正則模型, 要匹配的字串, flags=0,瀏覽整個字串去匹配,直到找到一個匹配,未匹配成功返回None
findall(正則模型, 要匹配的字串, flags=0) 瀏覽全部字串,匹配所有合規則的字串,匹配到的字串放到一個列表中,未匹配成功返回空列表。匹配成功的字串,不在參與下次匹配
split(正則模型, 要匹配的字串, 指定分隔個數, flags=0) 根據正則匹配分割字串,返回分割後的一個列表
sub(正則模型, 要替換的字串, 要匹配的字串, 指定匹配個數, flags=0),替換匹配成功的指定位置字串。
subn(正則模型, 要替換的字串, 要匹配的字串, 指定匹配個數, flags=0),替換匹配成功的指定位置字串,並且返回替換次數,可以用兩個變數分別接收。
re.compile(pattern[, flags]):把Regex文法轉化成Regex對象。flags定義包括:
re.I:忽略大小寫
re.L:表示特殊字元集 \w, \W, \b, \B, \s, \S 依賴於當前環境
re.M:多行模式
re.S:’ . ’並且包括分行符號在內的任一字元(注意:’ . ’不包括分行符號)
re.U: 表示特殊字元集 \w, \W, \b, \B, \d, \D, \s, \S 依賴於 Unicode 字元屬性資料庫
group,分組是去已經擷取的東西裡面再去匹配
group() 擷取匹配到的所有結果,不管有沒有分組將匹配到的全部拿出來,有參取匹配到的第幾個如2
groups() 擷取模型中匹配到的分組結果,只拿出匹配到的字串中分組部分的結果
groupdict() 擷取模型中匹配到的分組結果,只拿出匹配到的字串中分組部分定義了key的組結果
案例11:match和group效果
案例12,groups的效果,一旦運算式有()就是分組
案例13,groupdict的效果
案例14,findall+分組
案例15,split+分組
案例16:替換sub
圖片來源網址:https://www.jianshu.com/p/df2e26c5b2b5
程式連結:https://pan.baidu.com/s/1nuDdaGh 密碼:dvzj
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。