RE 模塊是Python的標準庫模塊,直接引入就可以直接使用,具體的功能包含如下:
regex = compile(pattern,flags = 0)
功能: 生產正則表達式對象
參數: pattern 正則表達式
flags 功能標誌位,擴展正則表達式的匹配
返回值: 正則表達式對象
re.findall(pattern,string,flags = 0)
功能: 根據正則表達式匹配目標字符串內容
參數: pattern 正則表達式
string 目標字符串
flags 功能標誌位,擴展正則表達式的匹配
返回值: 匹配到的內容列表,如果正則表達式有子組則只能獲取到子組對應的內容
regex.findall(string,pos,endpos)
功能: 根據正則表達式匹配目標字符串內容
參數: string 目標字符串
pos 截取目標字符串的開始匹配位置
endpos 截取目標字符串的結束匹配位置
返回值: 匹配到的內容列表,如果正則表達式有子組則只能獲取到子組對應的內容
re.split(pattern,string,flags = 0)
功能: 使用正則表達式匹配內容,切割目標字符串
參數: pattern 正則表達式
string 目標字符串
flags 功能標誌位,擴展正則表達式的匹配
返回值: 切割後的內容列表
re.sub(pattern,replace,string,count,flags = 0)
功能: 使用一個字符串替換正則表達式匹配到的內容
參數: pattern 正則表達式
replace 替換的字符串
string 目標字符串
count 最多替換幾處,默認替換全部
flags 功能標誌位,擴展正則表達式的匹配
返回值: 替換後的字符串
re.subn(pattern,replace,string,count,flags = 0)
功能: 使用一個字符串替換正則表達式匹配到的內容
參數: pattern 正則表達式
replace 替換的字符串
string 目標字符串
count 最多替換幾處,默認替換全部
flags 功能標誌位,擴展正則表達式的匹配
返回值: 替換後的字符串和替換了幾處
示例:
"""
re模塊
"""
import re
s = "Alex:1997,Sunny:1996" # 目標字符串
pattern = r"\w+:\d+" # 正則表達式
# re模塊調用
l = re.findall(pattern, s)
print(l) # ['Alex:1997', 'Sunny:1996']
# 正則對象調用
regex = re.compile(pattern)
l = regex.findall(s, 0, 10)
print(l) # ['Alex:1997']
# 正則表達式內容切割字符串
l = re.split(r',', s)
print(l) # ['Alex:1997', 'Sunny:1996']
# 替換目標字符串
s = re.subn(r':', '--', s, 4)
print(s) # ('Alex--1997,Sunny--1996', 2)
re.finditer(pattern,string,flags = 0)
功能: 根據正則表達式匹配目標字符串內容
參數: pattern 正則表達式
string 目標字符串
flags 功能標誌位,擴展正則表達式的匹配
返回值: 匹配結果的迭代器
re.fullmatch(pattern,string,flags=0)
功能:完全匹配某個目標字符串,相當於正則首部添加^,末尾添加$
參數:pattern 正則
string 目標字符串
返回值:匹配內容match object
re.match(pattern,string,flags=0)
功能:匹配某個目標字符串開始位置,相當於正則首部添加^
參數:pattern 正則
string 目標字符串
返回值:匹配內容match object
re.search(pattern,string,flags=0)
功能:匹配目標字符串第一個符合內容
參數:pattern 正則
string 目標字符串
返回值:匹配內容match object
compile對象屬性
【1】 pattern : 正則表達式
【2】 groups : 子組數量
【3】 groupindex : 捕獲組名與組序號的字典
示例:
"""
re模塊演示
生成match對象的函數
"""
import re
s = "熱烈慶祝建國70週年,1949年至今,人口14億"
pattern = r'\d+'
# 返回迭代對象
it = re.finditer(pattern, s)
# 每個match對象對應一處匹配內容
for i in it:
print(i.group()) # 獲取match對象匹配內容,70 1949 14
# 完全匹配
obj = re.fullmatch(r'.+', s)
print(obj.group()) # 熱烈慶祝建國70週年,1949年至今,人口14億
# 匹配開始位置
obj = re.match(r'\w+', s)
print(obj.group()) # 熱烈慶祝建國70週年
# 匹配第一處
obj = re.search(r'\d+', s)
print(obj.group()) # 70
match對象的屬性方法
1. 屬性變量
pos 匹配的目標字符串開始位置
endpos 匹配的目標字符串結束位置
re 正則表達式
string 目標字符串
lastgroup 最後一組的名稱
lastindex 最後一組的序號
2. 屬性方法
span() 獲取匹配內容的起止位置
start() 獲取匹配內容的開始位置
end() 獲取匹配內容的結束位置
groupdict() 獲取捕獲組字典,組名爲鍵,對應內容爲值
groups() 獲取子組對應內容
group(n = 0)
功能:獲取match對象匹配內容
參數:默認爲0表示獲取整個match對象內容,如果是序列號或者組名則表示獲取對應子組內容
返回值:匹配字符串
示例:
"""
match對象屬性方法演示
"""
import re
pattern = r'(ab)cd(?P<pig>ef)'
regex = re.compile(pattern)
obj = regex.search("abcdefghi", 0, 7)
# 屬性變量
print(obj.pos) # 目標字符串開始位置 0
print(obj.endpos) # 匹配目標結束位置 7
print(obj.re) # 正則 re.compile('(ab)cd(?P<pig>ef)')
print(obj.string) # 目標字符串 abcdefghi
print(obj.lastgroup) # 最後一組組名 pig
print(obj.lastindex) # 最後一組序號 2
# 屬性方法
print(obj.span()) # 匹配內容在目標字符串中的位置 (0, 6)
print(obj.start()) # 匹配內容在目標字符串中的開始位置 0
print(obj.end()) # 匹配內容在目標字符串中的結束位置 6
print(obj.groupdict()) # 捕獲組組名和對應內容字典 {'pig': 'ef'}
print(obj.groups()) # 子組對應內容 ('ab', 'ef')
print(obj.group()) # 獲取match對象內容 abcdef
print(obj.group('pig')) # ef
flags參數擴展
1. 使用函數:
re模塊調用的匹配函數。如:re.compile,re.findall,re.search....
2. 作用:
擴展豐富正則表達式的匹配功能
3. 常用flag
A == ASCII 元字符只能匹配ascii碼
I == IGNORECASE 匹配忽略字母大小寫
S == DOTALL 使 . 可以匹配換行
M == MULTILINE 使 ^ $可以匹配每一行的開頭結尾位置
4. 使用多個flag
方法:使用按位或連接
比如: flags = re.I | re.A
示例:
"""
擴展標誌位演示
"""
import re
s = "Hello" \
"北京" \
"hello" \
"上海"
# 只能匹配ASCII編碼
# regex = re.compile(r'\w+', flags=re.A) # ['Hello', 'hello']
# 忽略字母大小寫
# regex = re.compile(r'[a-z]+', flags=re.I) # ['Hello', 'hello']
# . 可以匹配換行
regex = re.compile(r'.+', flags=re.S) # ['Hello北京hello上海']
# ^ $ 可以匹配每行結尾位置
# regex = re.compile(r'Hello$', flags=re.M)
# pattern = '''hello # 匹配Hello
# \s #匹配換行
# \w+ # 匹配 北京
# '''
# regex = re.compile(pattern, flags=re.X | re.I)
l = regex.findall(s)
print(l)