正規表示式:就是用來篩選字串中特定內容的一串具有某種邏輯規則的字元組成。正規表示式不是python獨有的,而是一門獨立的技術,它在所有的程式語言中都有使用,在python中使用就必須依賴於re模組。正則的應用場景:比如,爬蟲,資料分析。
正則的使用某些特定邏輯的字元構造的**,可以簡化我們的**的冗餘。看以下二圖,請做比較。
正規表示式匹配字串規則:
字元組 [ ] 乙個字串裡面的表示式都是或的關係
[0-9] 表示匹配0~9的數字,中括號內部數字之間是或的關係,只要有乙個數字能對應到0~9的任意乙個數字都認為匹配成功。也可以寫成[0123456789]的形式
[a-z] 匹配小寫字母
[a-z]匹配大寫字母
[0-9a-fa-f] 可以匹配數字大小寫形式的a-f,用來驗證十六進製制字元
元字元:
^與$連用,能實現精準的匹配,^與$之間是什麼內容,匹配的內容就必須寫什麼內容;比如,^ab$,則待匹配的內容也必須是ab
^[和],表示第乙個字元是以『和』開頭的;[^和]表示除了括號內的任意字串
abc|ab 一定要將長的正則放在|前面短的放在後面,不然兩個字串極盡相似,長的字串在後面被前面短的字串匹配成功一部分,就相當於把長字串切成了兩部分,匹配不上的捨棄掉了,後面長的就匹配不上了。
正則在匹配的時候預設都是貪婪匹配(盡量匹配多的),你可以通過在量詞後面加上乙個?就可以將貪婪匹配變成非貪婪匹配(惰性匹配)
量詞必須跟在正則符號的後面,量詞只能能夠限制緊挨著它的那乙個正則符號
分組:當多個正則符號需要重複多次的時候或者當做乙個整體進行其他操作,那麼可以分組的形式,分組在正則的語法中就是使用小括號()
正則事例:
re模組下的常用方法:
python使用正則必須借助於re模組 或者是支援正規表示式書寫的方法
import re(使用re模組,首先先導入)
re模組下內建的方法:
re.findall(列印直接取值)
re.search (有匹配的結果時,返回的是乙個物件,還需呼叫.group()才能取值)
re.match(同search)
split
subsubn
compile
finditer
1), re.findall 表示式為: findall('正規表示式','帶匹配的字串') 找出字串中符合正規表示式全部內容 並且返回的是乙個列表,列表中的元素就是正則匹配到的結果。
2),re.search 表示式為: search('正規表示式','帶匹配的字串'), 如果物件存在,不會給你直接返回匹配到的結果 ,而是給你返回乙個物件,必須呼叫group才能看到匹配到的結果。如果匹配不到,返回none, 呼叫group直接報錯。search只會依據正則查一次 只要查到了結果 就不會再往後查詢。
3), match
1.match只會匹配字串的開頭部分
2.當字串的開頭不符合匹配規則的情況下 返回的也是none 呼叫group也會報錯
split 在re下的split表示切除的意思,切除之後生成的是乙個列表
sub(能用正則將字串中的數字替換掉,返回一整個字串) sub的表示式re.sub('正規表示式','新的內容','待替換的字串',n),n代表要替換字串中數字的個數
subn 返回的是乙個元組 元組的第二個元素代表的是替換的個數
compile
re.compile 下再呼叫findall,結果生成按我們指定的只能重複三個數字,切分成列表。
finditer (就是乙個迭代器) re.finditer('正則』,『字串』).__next__.group(),當取出所有值,就會報錯
還可以給某乙個正規表示式起別名
在python裡的分組,與正則無關。這是因為findall會優先把匹配結果組裡內容返回,如果想要匹配結果,取消許可權即可。
9 正則和re模組
目錄二 re模組 正規表示式 一些有特殊含義的字元組合到一起,形成一套規則,用於匹配字串的。用途 1 檢測字串是否合法2 從大檔案中找到符合規則的內容放到字元組和非字元組中表示所有 預設匹配除 n之外的任意乙個字元 匹配字元開頭 匹配字元結尾 匹配 號前的字元0次或多次 匹配前乙個字元1次或多次 匹...
正則re模組
匹配任意乙個字元 以某個字元開頭 以某個字元結尾 匹配0次或多次 匹配一次或多次 匹配0次或1次 匹配n次 匹配n次或多次 匹配n次到m次 字符集,非 a z 匹配小寫字母a到z的任意字母一次 a z 匹配除了小寫字母a到z之外的任意字元一次 d 匹配數字0 9,0次或多次 d匹配任何十進位制數,0...
re正則模組
1.正規表示式的常用符號 預設匹配除 n之外的任意乙個字元,若指定flag dotall,則匹配任意字元,包括換行 匹配字元開頭,若指定flags multiline,這種也可以匹配上 r a nabc neee flags re.multiline 匹配字元結尾,或e.search foo bfo...