欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

三十四、Python之RE模块的使用

程序员文章站 2024-01-12 15:14:46
...

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

三十四、Python之RE模块的使用

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)

 

相关标签: Python笔记