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(), match.group(), match.group())
result1 = re.findall(regex, content)
print('\nre.findall() return value: ' + str(type(result1)))
for m in result1:
print(m[], m[])
result2 = re.finditer(regex, content)
print('\nre.finditer() return value: ' + str(type(result2)))
for m in result2:
print(m.group(), m.group(), m.group()) ##字元串
輸出:
None
re.search() return value: <TYPE ?_sre.SRE_Match?>
STR1 STR1
re.findall() return value: <TYPE ?list?>
STR1 STR2
re.finditer() return value: <TYPE ?callable-iterator?>
STR1 STR1
STR2 STR2
試着把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(), match.group())
result1 = re.findall(regex, content)
print('\nre.findall() return value: ' + str(type(result1)))
for m in result1:
print(m[])
result2 = re.finditer(regex, content)
print('\nre.finditer() return value: ' + str(type(result2)))
for m in result2:
print(m.group(), m.group()) ##字元串
輸出:
None
re.search() return value: <TYPE ?_sre.SRE_Match?>
STR1
re.findall() return value: <TYPE ?list?>
re.finditer() return value: <TYPE ?callable-iterator?>
STR1
STR2