Python 正則re模組之findall 詳解

2021-10-01 04:55:41 字數 1802 閱讀 8163

python 正則re模組之findall()詳解

先說一下findall()函式的兩種表示形式

import re

kk = re.compile(r』\d+』)

kk.findall(『one1two2three3four4』)

#[1,2,3,4]

#注意此處findall()的用法,可傳兩個引數;

kk = re.compile(r』\d+』)

re.findall(kk,「one123」)

#[1,2,3]

2. 正規表示式可能遇到的坑 — 正規表示式中有括號()

正規表示式中當沒有括號時,就是正常匹配,在本例中"/w+/s+/w+「第一次匹配到的字元為"2345 3456」,由於是貪婪模式會 繼續匹配,第二次從"4567"開始匹配匹配到的結果為字串"4567 5678"

import re

string=「2345 3456 4567 5678」

regex=re.compile("\w+\s+\w+")

print(regex.findall(string))

#[『2345 3456』, 『4567 5678』]

!!! 首先的知道各個字元所表達的含義,這裡只說一下/s 和 /s

\s – 匹配任何不可見字元,包括空格、製表符、換頁符等等

\s – 匹配任何可見字元 通常[/s/s] – 可匹配任意字元

[\s\s]*? – 匹配懶惰模式的任意字元

正規表示式中有乙個括號時,其輸出的內容就是括號匹配到的內容,而不是整個表示式所匹配到的結果,但是整個正規表示式執 行了只不過只輸出括號匹配到的內容, 在第一次匹配時跟上述沒有括號時一樣,匹配到 「2345 3456」 ,只不過只輸出(/w+)匹配 到的結果 即"2345",第二次匹配同理從"4567" 開始,匹配到"4567 5678",但是還是只是輸出"4567"

import re

string=「2345 3456 4567 5678」

regex=re.compile("(\w+)\s+\w+")

print(regex.findall(string))

#[『2345』, 『4567』]

3. 當正規表示式中有兩個括號時,其輸出是乙個list 中包含2個 tuple,從輸出的結果可以看出,有兩個元組,每乙個元組中有兩 個字串 : 其中第乙個字串"2345 3456"是最外面的括號輸出的結果,第二個是裡面括號(/w+)輸出的結果 「2345」, 第二個 元組是 第二次匹配的結果 – 詳解同第一次匹配。

import re

string=「2345 3456 4567 5678」

regex=re.compile("((\w+)\s+\w+)")

print(regex.findall(string))

#[(『2345 3456』, 『2345』), (『4567 5678』, 『4567』)]

按以上**例子講解:

findall函式返回的總是正規表示式在字串中所有匹配結果的列表,此處主要討論列表中「結果」的展現方式,即findall中返回列表中每個元素包含的資訊。

@1.當給出的正規表示式中帶有多個括號時,列表的元素為多個字串組成的tuple,tuple中字串個數與括號對數相同,字串內容與每個括號內的正規表示式相對應,並且排放順序是按括號出現的順序。

@2.當給出的正規表示式中帶有乙個括號時,列表的元素為字串,此字串的內容與括號中的正規表示式相對應(不是整個正規表示式的匹配內容)。

@3.當給出的正規表示式中不帶括號時,列表的元素為字串,此字串為整個正規表示式匹配的內容。

參考了希望對大家有幫助, 遠離大坑!

python常用模組之re模組(正則)

python種的re模組常用的5種方法,分別是re.match re.search re.findall re.split re.sub。在介紹五種方法之前,需要介紹一下正則的基礎。表示任意字元,除 n以為 轉義字元 字符集,表示取其中任意乙個字元。比如 abc d 可以匹配到ad bd cd。d ...

python常用模組之 正則re模組

python中使用正規表示式的步驟 1.匯入re模組 import re 2.初始化乙個regex物件 re.compile 3.剛剛建立的regex物件呼叫search方法進行匹配,返回要給march物件 4.剛剛的march物件呼叫group方法,展示匹配到的字串 下面例子的知識點 對正規表示式...

Python 正則re模組之findall 詳解

1.先說一下findall 函式的兩種表示形式 import re kk re.compile r d kk.findall one1two2three3four4 1,2,3,4 注意此處findall 的用法,可傳兩個引數 kk re.compile r d re.findall kk,one1...