三十四、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)
发布了39 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/chiaotien/article/details/104569043