標籤:color nbsp end cab 分組 使用 特殊 其他 string
findall方法
相比其他方法,findall方法有些特殊。它的作用是尋找字串中所有能匹配的字串,並以結果存於列表中,然後返回該列表
注意: match 和 search 是匹配一次 findall 匹配所有。
1 pattern.findall方法
該方法的作用是在string[pos, endpos]區間從pos下標處開始尋找所有滿足pattern的子串, 直到endpos位置結束,並以列表的形式返回尋找的結果,如果未找到則返回一個空列表。
文法格式:
pattern.findall(string[, pos[, endpos]])
2 re.findall
擷取字串中所有能匹配的字串,並以列表的形式返回。
文法格式:
re.findall(pattern, string, flags=0)
3 當pattern有括弧(分組)時,列表中的字串只是圓括弧中的內容,不是整個Regex所匹配的內容 (1)當Regex中含有多個圓括弧()時
返回列表中的元素由所有滿足匹配的內容組成,但是每個元素都是由運算式中所有圓括弧匹配的內容組成的元組
>>> re.findall(r‘a(b)(c)‘,‘abcabc‘)
[(‘b‘, ‘c‘), (‘b‘, ‘c‘)]
(2)當Regex中只帶有一個圓括弧時
返回的列表的元素由所有能成功匹配運算式中圓括
號匹配的內容組成,並且該列表中的元素都是字串
>>> re.findall(r‘a(b)c‘,‘abcabc‘)
[‘b‘, ‘b‘]
(3)當Regex中沒有圓括弧時
返回列表中的元素由所有能成功匹配的子串組成。
>>> re.findall(r‘abc‘,‘abcabc‘)
[‘abc‘, ‘abc‘]
finditer方法
finditer函數跟findall函數類似,但返回的是一個迭代器, 而不是一個像findall函數那樣的存有所有結果的list。
finditer的每一個對象可以使用group(可以擷取整個匹配串)和groups方法;
在有分組的情況下,findall只能獲得分組,不能獲得整個匹配串。
>>> re.findall(r‘a(b)(c)‘,‘abcd 12abcde‘)
[(‘b‘, ‘c‘), (‘b‘, ‘c‘)]
>>> a = re.finditer(r‘a(b)(c)‘,‘abcd 12abcde‘)
>>> for i in a :
... print i.group()
...
abc
abc
>>> a = re.finditer(r‘a(b)(c)‘,‘abcd 12abcde‘)
>>> for i in a:
... print i.groups()
...
(‘b‘, ‘c‘)
(‘b‘, ‘c‘)
pythonRegex(5)--findall、finditer方法