python中正則模組

原风带走思绪發表於2024-09-06
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())

相關文章