python爬蟲筆記之re.compile.findall()


re.compile.findall原理是理解了,但輸出不大理解(主要是加了正則表達式的括號分組) 

一開始不懂括號的分組及捕捉,看了網上這個例子(如下),然而好像還是說不清楚這個括號的規律(還是說我沒找到或是我理解能力太差),還是看不出括號的規律,於是更多的嘗試(第二張大圖),並最后總結規律。

 

 

下圖是為了嘗試出括號分組的規律,下面是總結

 

就從最后一次匹配說起吧

 

分析:首先是匹配的順序,分析某個括號時,暫時去掉其它括號,易讀

第一步,先對整個‘ ’內的規則作出匹配,整體匹配,先去括號(易讀),即先從s中匹配出第一個【\w+\w+\s+\w+\s+\w+】(去括號的樣子),但由於沒有括號將這個整體擴上,所以沒有捕捉(即不用輸出),第一個匹配到的大字符串是“qew rty uio”

【可以這樣一個個對應】

\w+  \w+  \s+  \w+  \s+  \w+

  |        |        |       |       |       |

 qe     w             rty           uio

對應圖

第二步,匹配到的字符串再進行匹配捕捉,即輸出,現在從左往右,一個個左括號捕捉起,第一個左括號【(\w+\w+\s+\w+)】(暫時去掉了嵌套在中間的左括號,易讀),則匹配到上面字符串中(“qew rty uio”)的"qew rty"(可對照上面的對應圖),由於是括號內,所以捕捉(即輸出)

第三步,第二個括號,\w+(\w+)\s+\w+(暫時去掉其它括號) 匹配上一括號中的字符串(“qew rty”),即是匹配到‘w’(可對照上面的對應圖),由於是括號內,所以捕捉(即輸出)

第四步,第三個括號,\w+\w+\s+\w+(\s+\w+)(暫時去掉其他括號)匹配並輸出第一步中的字符串,即是“uio”

 

總結

     1、首先全部去括號的匹配,畫出對應圖,這樣很清晰,然后看括號內的即捕捉輸出,然后在匹配的文本(s)再尋找下一個匹配的大字符串,一直找下去……

          2、去括號是為了清晰的分析,主要注意從第一個左括號開始分析起

          3、如果是嵌套括號,如(((a)b)(c)d),若要捕捉a括號的字符,則先需要匹配最外面的括號,然后在慢慢往里面匹配,即是先匹配出d括號的內容,再在d括號里面匹配出b括號的內容,再在b括號中匹配出a括號的內容,然后所有括號里的,輸出,按左邊第一個括號所匹配的字符串排列:(d,b,a,c)

 

 

 

 

如有錯誤,麻煩及時指正,謝謝!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM