re模組 findall 詳解

2022-07-02 08:39:14 字數 2003 閱讀 2482

1

import

re2 kk = re.compile(r'

\d+'

)3 kk.findall('

one1two2three3four4')

4#[1,2,3,4]56

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

7 kk = re.compile(r'

\d+'

)8 re.findall(kk,"

one123")

9#[1,2,3]

1)當正規表示式中  沒有括號時,就是正常匹配,如本例中"\w+\s+\w+"

在本例中"\w+\s+\w+"第一次匹配到的字元為"2345  3456",由於是貪婪模式會     繼續匹配;第二次從"4567"開始匹配, 匹配到的結果為字串"4567 5678"。

1

import

re2 string="

2345 3456 4567 5678

"3 regex=re.compile("

\w+\s+\w+")

4print

(regex.findall(string))5#

['2345 3456', '4567 5678']6#

補充: 7#

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

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

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

2)當正規表示式中有  乙個括號時,如"(\w+)\s+\w+"其輸出的內容就是括號匹配到的內容

原理:正規表示式中有乙個括號時,其輸出的內容就是括號匹配到的內容,而不是整個表示式所匹配到的結果,但是整個正規表示式執行了,只不過只輸出括號匹配到的內容。

匹配過程:

1. 第一次匹配時跟上述沒有括號時一樣,匹配到 "2345  3456" ,只不過只輸出(\w+)匹配     到的結果 即"2345";

2. 同理,第二次匹配從"4567" 開始,匹配到"4567  5678",但是只輸出"4567"。

import

restring="

2345 3456 4567 5678

"regex1=re.compile("

(\w+)\s+\w+")

print

(regex1.findall(string))

#['2345', '4567']

3)當正規表示式中有兩個括號時,如"((\w+)\s+\w+)",其輸出結果是乙個list 中包含2個 tuple

從輸出的結果可以看出,有兩個元組,每乙個元組中有   兩個字串 :

其中,第乙個元組種的第乙個字串"2345 3456"是最外面的括號輸出的結果,第二個字串是裡面括號(\w+)輸出的結果 "2345",

第二個元組是  第二次匹配的結果 -- 詳解同第一次匹配。

import

restring="

2345 3456 4567 5678

"regex2=re.compile("

((\w+)\s+\w+)")

print

(regex2.findall(string))

#[('2345 3456', '2345'), ('4567 5678', '4567')]

第乙個 regex 中不帶有括號,其輸出的內容就是整個表示式所匹配到的內容。

第二個 regex 中帶有1個括號,其輸出的內容就是括號匹配到的內容,而不是整個表示式所匹配到的結果。

第三個 regex 中是帶有2個括號的,我們可以看到其輸出是乙個list 中包含2個 tuple,---  多個括號就會返回  多個括號分別匹配到的結果 

正規表示式的特點:

1. 有括號時只能匹配到括號中的內容,沒有括號就正常匹配。

2. 在正則裡面 「()」 代表的是分組的意思,乙個括號代表乙個分組,你只能匹配到"()"中的內容

re模組findall函式用法

本文件介紹了正規表示式元字元 和 re模組 findall 函式用法。給予正規表示式強大的功能和靈活性。表 示 法 描述正規表示式示例 符號literal 匹配文字字串的字面值literal foo.匹配任何字元 除了 n 之外 b.b 匹配字串起始部分 dear 匹配字串終止部分 bin sh 表...

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...

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...