1. 程式人生 > >python學習day19正則模塊

python學習day19正則模塊

pytho day 括號 打印 數字 sub 規則 獲取 區別

正則模塊:正則
所有程序員都要用到正則
爬蟲方向要求對正則表達式掌握牢固
正則表達式:是一種客觀存在的規則
re模塊,是python提供的操作正則表達式的工具
正則表達式在所有語言中都是通用的
中括號在正咋中是字符集,只能正序,由小到大
.(點)是匹配除了換行以外所有字符
\w小寫w匹配字母或數字或下劃線
\s匹配任意的空白符
\n匹配一個換行符
\d匹配所有數字
\t匹配一個制表符
\b匹配一個單詞的結尾
\^匹配字符串的開始 在字符集裏面就是
\$匹配字符串結尾
\W大寫的w 匹配非字母或數字或下劃線
\ID匹配非數字
\S大寫s匹配非空白符
\W\w 能匹配所有,互斥的
只要大寫和小寫就匹配所有字符

量詞:
*重復零次或更多次
+重復一次或更多次
?重復零次或一次
{n}可以放數字可以放兩個數字,重復N此
{n,m}重復n到m次
量詞兩條規則:
1.每一個量詞只控制前一個字符的出現次數
2.這個量詞的匹配為貪婪匹配模式 能匹配多次就不匹配零次
量詞後面加問好就是惰性匹配,按少的匹配 將貪婪匹配模式改成非貪婪匹配模式
字符後面加量詞,量詞後面加問好才是控制匹配模式,問號可以單用

^放在字符集裏面就是非什麽什麽就匹配

正則表達式中\是有意義的,如果想要在字符串中匹配一個\w的話,得在前面再加一個\,如果字符串裏面的\w也是有特殊意義的
那麽在正則表達式中要在加兩個\ 太麻煩
如果想要這樣匹配的話,前面加個r加在字符串的分號前面,r功能取消python中所有轉義符的功能。

正則貪婪匹配的本質:
回溯算法:先向後匹配然後再往回退再匹配


import re
re.findall()前面是正則表達式,後面是要匹配的字符串,返回的是列表,裏面是字符串
直接返回匹配的列表,如果沒找到就是空列表
re.search() 同上接收到的結果打印的時候要.group(),否則不行,匹配找到的第一個結果
都要用if先來判斷是不是空內容來用 否則報錯
re.match()同上 ,match會在自己判斷時在開頭加一個^,也是只返回匹配到的第一個結果,不過是從開頭開始匹配
三個方法:
在調用的角度上看,沒有區別,接收兩個參數按照位置傳,正則表達式的字符串和待匹配的字符串
返回值的區別,findall返回列表,所有匹配值都出現在列表中,如果沒有返回空列表,search如果匹配到結果就返回第一個匹配到的
如果沒匹配到,返回none,匹配到的結果用group方法獲取,match同search,不過必須要從開頭匹配
re.split 按照正則表達式匹配結果分割
re.sub 和replace用法差不多,匹配結果來替換
re.subn 替換後告訴替換了幾次
obj = re.compile(‘\d{3}‘)將正則表達式編譯成為一個正則表達式對象,規則要匹配的是3個
ret = obj.search(‘abc123eeee‘)#正則表達式對象調用search,參數為待匹配的字符串
print(ret.group())結果123
re.finditer()返回一個叠代器 要用叠代器方法取值


re.findall會優先匹配括號分組內的數據,只顯示分組裏面的。如果想取消分組的話,要在分組開頭寫一個問號一個冒號
re.split優先級查詢
如果對查詢的條件進行分組,那麽根據匹配結果分割的時候,結果也是可以保留下來的。
例如
ret = re.split(‘(\d)‘,‘egon3ioo4fkj)
這樣的話3和4都可以保留下來
多個數據想取誰,先分組,然後給要取得東西取個名,前面加?P<> 尖角號裏面放要取得數據的名
用已經存在的分組(?P=name)前面尖角號是創建這樣一個分組,後面等於是用這個分組


分組:對多個字符進行整體的量詞約束
對於一條匹配的正則,只對其中我需要的內容進行分組

正則表達式是一種字符串的篩選規則
re模塊 是python提供的操作正則規則的模塊

python學習day19正則模塊