Python之RE模塊的使用

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對象屬性

1pattern : 正則表達式

2groups : 子組數量

3groupindex : 捕獲組名與組序號的字典

示例:

"""
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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章