python正则表达式(5)--findall、finditer方法

findall方法

相比其余方法,findall方法有些特殊。它的做用是查找字符串中全部能匹配的字符串,并以结果存于列表中,而后返回该列表正则表达式

注意: match 和 search 是匹配一次 findall 匹配全部。函数

1 pattern.findall方法

该方法的做用是在string[pos, endpos]区间从pos下标处开始查找全部知足pattern的子串, 直到endpos位置结束,并以列表的形式返回查找的结果,若是未找到则返回一个空列表。spa

语法格式:对象

pattern.findall(string[, pos[, endpos]])字符串

2 re.findall

获取字符串中全部能匹配的字符串,并以列表的形式返回。string

语法格式:it

re.findall(pattern, string, flags=0)class

3 当pattern有括号(分组)时,列表中的字符串只是圆括号中的内容,不是整个正则表达式所匹配的内容

  (1)当正则表达式中含有多个圆括号()时

  返回列表中的元素由全部知足匹配的内容组成,可是每一个元素都是由表达式中全部圆括号匹配的内容组成的元组迭代器

  >>> re.findall(r'a(b)(c)','abcabc')语法

  [('b', 'c'), ('b', 'c')]

  (2)当正则表达式中只带有一个圆括号时

  返回的列表的元素由全部能成功匹配表达式中圆括

  号匹配的内容组成,而且该列表中的元素都是字符串

  >>> re.findall(r'a(b)c','abcabc')

  ['b', 'b']

  (3)当正则表达式中没有圆括号时

  返回列表中的元素由全部能成功匹配的子串组成。

  >>> 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')