1import
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"。
1import
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"。
importrestring="
2345 3456 4567 5678
"regex1=re.compile("
(\w+)\s+\w+")
(regex1.findall(string))
#['2345', '4567']
3)當正規表示式中有兩個括號時,如"((\w+)\s+\w+)",其輸出結果是乙個list 中包含2個 tuple
從輸出的結果可以看出,有兩個元組,每乙個元組中有 兩個字串 :
其中,第乙個元組種的第乙個字串"2345 3456"是最外面的括號輸出的結果,第二個字串是裡面括號(\w+)輸出的結果 "2345",
第二個元組是 第二次匹配的結果 -- 詳解同第一次匹配。
importrestring="
2345 3456 4567 5678
"regex2=re.compile("
((\w+)\s+\w+)")
(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...