re就Python中用于正则表达式相关处理的类,这四个方法都是用于匹配字符串的,具体区别如下:
match
匹配string 开头,成功返回Match object, 失败返回None,只匹配一个。
search
在string中进行搜索,成功返回Match object, 失败返回None, 只匹配一个。
findall
在string中查找所有 匹配成功的组, 即用括号括起来的部分。返回list对象,每个list item是由每个匹配的所有组组成的list。
finditer
在string中查找所有 匹配成功的字符串, 返回iterator,每个item是一个Match object。
不多说概念,直接看栗子!
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from __future__ import print_function
import re
content = '333STR1666STR299'
regex = r'([A-Z]+(\d))'
if __name__ == '__main__':
print(re.match(regex, content)) ##content的开头不符合正则,所以结果为None。
##只会找一个匹配,match[0]是regex所代表的整个字符串,match[1]是第一个()中的内容,match[2]是第二对()中的内容。
match = re.search(regex, content)
print('\nre.search() return value: ' + str(type(match)))
print(match.group(0), match.group(1), match.group(2))
result1 = re.findall(regex, content)
print('\nre.findall() return value: ' + str(type(result1)))
for m in result1:
print(m[0], m[1])
result2 = re.finditer(regex, content)
print('\nre.finditer() return value: ' + str(type(result2)))
for m in result2:
print(m.group(0), m.group(1), m.group(2)) ##字符串
输出:
None
re.search() return value: <TYPE ?_sre.SRE_Match?>
STR1 STR1 1
re.findall() return value: <TYPE ?list?>
STR1 1 STR2 2
re.finditer() return value: <TYPE ?callable-iterator?>
STR1 STR1 1
STR2 STR2 2
试着把regex最外边的括号去掉,即regex = r'[A-Z]+(\d)'
,组的个数就会减少一个:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from __future__ import print_function
import re
content = '333STR1666STR299'
regex = r'[A-Z]+(\d)'
if __name__ == '__main__':
print(re.match(regex, content)) ##content的开关不符合正则,所以结果为None。
##只会找一个匹配,match[0]是regex所代表的整个字符串,match[1]是第一个()中的内容,match[2]是第二对()中的内容。
match = re.search(regex, content)
print('\nre.search() return value: ' + str(type(match)))
print(match.group(0), match.group(1))
result1 = re.findall(regex, content)
print('\nre.findall() return value: ' + str(type(result1)))
for m in result1:
print(m[0])
result2 = re.finditer(regex, content)
print('\nre.finditer() return value: ' + str(type(result2)))
for m in result2:
print(m.group(0), m.group(1)) ##字符串
输出:
None
re.search() return value: <TYPE ?_sre.SRE_Match?>
STR1 1
re.findall() return value: <TYPE ?list?>
1 2
re.finditer() return value: <TYPE ?callable-iterator?>
STR1 1
STR2 2