問題背景:當我們爬取網頁信息時,對於一些標籤的提取是沒有意義的,所以需要提取標籤中間的信息。
解決辦法:用到了re包下的函數
方法1:用到了research()方法和group()方法
方法2:用到了findall()方法
具體實現:
import re # 匹配兩個字符中間的所有字符 a = '<p>life is short, i use python<a/>i love it<p>' r = re.search('<p>(.*)<a/>(.*)<p>', a) # python中正則匹配,如果不加(),默認是一個分組,group()中的參數,如果是0,默認是所有組,即返回整個字符串 # 如果是要訪問自定義的組的元素,則需要從1開始 print(r.group(0)) # <p>life is short, i use python<a/>i love it<p> print(r.group(1)) # life is short, i use python print(r.group(2)) # i love it # 用一個元組來返回所有組中的內容 print(r.group(0, 1, 2)) # ('<p>life is short, i use python<a/>i love it<p>', 'life is short, i use python', 'i love it') # 返回所有元組的信息,不包括第0組 print(r.groups()) # ('life is short, i use python', 'i love it') # 另一種匹配方式:使用findall() b = re.findall('<p>(.*)<a/>(.*)<p>', a) print(b) # [('life is short, i use python', 'i love it')]
像邊界字符集(^,$等)或者概括字符集(\d,\D,\w等)匹配的都是一個字符,我們需要匹配一個連續的字符串時,會需要有組的概念,一個組中的元素是且的關係;例如:匹配Python字符串時,需要如下處理:()表示的組的概念,不可將()和[]混淆
import re a = 'PythonPythonPythonPython' # ()表示且的關係,[]表示或的關係 r = re.findall('(Python){3}', a) print(r)