Python 正則re模組之findall 詳解

2021-08-14 11:14:52 字數 1566 閱讀 7407

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,"one123")

#[1,2,3]

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

1. 正規表示式中當沒有括號時,就是正常匹配,在本例中"/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]*? -- 匹配懶惰模式的任意字元

2. 正規表示式中有乙個括號時,其輸出的內容就是括號匹配到的內容,而不是整個表示式所匹配到的結果,但是整個正規表示式執       行了只不過只輸出括號匹配到的內容, 在第一次匹配時跟上述沒有括號時一樣,匹配到 "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')]

希望對大家有幫助!!  遠離大坑

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 詳解

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