import re
# 1. findall() 匹配字串中所有符合正則的字串,並返回一個列表
result_list = re.findall(r"\d+", "我的手機號是13812345678,我的QQ號是456789123")
print(result_list, type(result_list)) # ['13812345678', '456789123'] <class 'list'>
print("==============")
# 2. finditer() 匹配字串中所有符合正則的字串,並返回一個迭代器
result_iter = re.finditer(r"\d+", "我的手機號是13812345678,我的QQ號是456789123")
for match in result_iter:
print(match, type(match)) # Match 物件 從Match物件中獲取資料需要使用group()方法
print(match.group()) # 13812345678 456789123
print("==============")
# 3. search() 匹配字串中第一個符合正則的字串,並返回一個Match物件
result_match = re.search(r"\d+", "我的手機號是13812345678,我的QQ號是456789123")
print(result_match.group(), type(result_match)) # Match 物件 <class 're.Match'>
print("==============")
# 4. match() 從頭開始匹配,如果字串開始位置匹配正規表示式,返回一個Match物件,否則返回None
# 可以認為在正則的前面加上了 ^
result_match = re.match(r"\d+", "我的手機號是13812345678,我的QQ號是456789123")
try:
print(result_match.group(), type(result_match)) # 13812345678 <class 're.Match'>
except Exception:
print("NoneType型別中沒有group()方法")
print("================")
# 5. 預載入正規表示式
obj = re.compile(r"\d+")
result_iter = obj.finditer("我的手機號是13812345678,我的QQ號是456789123")
for match in result_iter:
print(match.group()) # 13812345678 456789123
print("================")
# 6. 惰性匹配
s = """
<div class='jay'><span id='1'>抽菸</span></div>
<div class='jj'><span id='2'>喝酒</span></div>
<div class='jolin'><span id='3'>燙頭</span></div>
<div class='sylar'><span id='4'>阿巴阿巴</span></div>
<div class='tory'><span id='5'>???</span></div>
"""
obj = re.compile(r"<div class='.*?'><span id='(?P<id>.*?)'>(?P<content>.*?)</span></div>", re.S)
result_iter = obj.finditer(s)
for match in result_iter:
print(match.group(2)) # 抽菸 喝酒 燙頭 阿巴阿巴 ???
print(match.group("id"))
# 構建為字典的格式
print(match.groupdict())