python 的 re庫獲取兩個字符中間的內容(轉)

問題背景:當我們爬取網頁信息時,對於一些標籤的提取是沒有意義的,所以需要提取標籤中間的信息。

 

解決辦法:用到了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)

複製代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章