---------------------------------------------------------------------------------------------------------------
regex = compile(pattern,flags = 0)
功能: 生成正则表达式对象
参数: pattern 正则表达式
flags 功能标志位,扩展正则表达式的匹配
返回值: 正则表达式对象
|
re模块与正则表达式对象拥有的"相同"方法:
findall | split | sub | subn | finditer | fullmatch | match | search |
compile对象属性
【1】 pattern : 正则表达式 【2】 groups : 子组数量 【3】 groupindex : 捕获组名与组序号的字典
------------------------------------------------------------------------------------------------------------
re.findall(pattern,string,flags = 0)
功能: 根据正则表达式匹配目标字符串内容
参数: pattern 正则表达式
string 目标字符串
flags 功能标志位,扩展正则表达式的匹配
返回值: 匹配到的内容列表,如果正则表达式有子组则只能获取到子组对应的内容
|
regex.findall(string,pos,endpos)
功能: 根据正则表达式匹配目标字符串内容
参数: string 目标字符串
pos 截取目标字符串的开始匹配位置
endpos 截取目标字符串的结束匹配位置
返回值: 匹配到的内容列表,如果正则表达式有子组则只能获取到子组对应的内容
|
import re s = "Alex:1994,Sunny:1999" # findall返回匹配到的内容字符串列表 print(re.findall(r'\w+:\d+', s)) # ['Alex:1994', 'Sunny:1999'] # findall返回匹配到的子组元组列表 print(re.findall(r'(\w+):(\d+)', s)) # [('Alex', '1994'), ('Sunny', '1999')] # 当只有一个子组时, 返回的是子组字符串列表 print(re.findall(r'(\w+):\d+', s)) # ['Alex', 'Sunny']
-----------------------------------------------------------------------------------------------------------------------------------------
re.split(pattern,string,flags = 0)
功能: 使用正则表达式匹配内容,切割目标字符串
参数: pattern 正则表达式
string 目标字符串
flags 功能标志位,扩展正则表达式的匹配
返回值: 切割后的内容列表
|
re.sub(pattern,replace,string,max,flags = 0)
功能: 使用一个字符串替换正则表达式匹配到的内容
参数: pattern 正则表达式
replace 替换的字符串
string 目标字符串
max 最多替换几处,默认替换全部
flags 功能标志位,扩展正则表达式的匹配
返回值: 替换后的字符串
|
re.subn(pattern,replace,string,max,flags = 0)
功能: 使用一个字符串替换正则表达式匹配到的内容
参数: pattern 正则表达式
replace 替换的字符串
string 目标字符串
max 最多替换几处,默认替换全部
flags 功能标志位,扩展正则表达式的匹配
返回值: 替换后的字符串和替换了几处
|
print(re.split(r'[,:]',s)) # ['Alex', '1994', 'Sunny', '1999'] print(re.subn(r':','-',s,1)) # ('Alex-1994,Sunny:1999', 1)
-----------------------------------------------------------------------------------------------------------------------------------------
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
|
finditer | fullmatch | match | search |
---> 会生成match对象 ---> match对象的属性与方法有:
属性变量 | end | endpos | string | re | lastgroup | lastindex |
属性方法 | span | start | end | groupdict | groups | group |
import re s = "今年是2019年,建国70周年" pattern = r"\d+" # 返回迭代对象 it = re.finditer(pattern,s) for i in it: print(i.group()) # 获取match对象对应内容 # 2019 70 # 完全匹配 obj = re.fullmatch(r'.+',s) print(obj.group()) # 今年是2019年,建国70周年 # 匹配开始位置 obj = re.match(r'\w+',s) print(obj.group()) # 今年是2019年 # 匹配第一处 obj = re.search(r'\d+',s) print(obj.group()) # 2019
一个match对象对应一个匹配到的内容.
fullmatch方法如果没有匹配到内容, 则返回的是一个None, 而None没有group等方法, 此时调用group方法会报错.
it ---> <callable_iterator object at 0x7f839ef58748>
i ---> <_sre.SRE_Match object; span=(3, 7), match='2019'>
i ---> <_sre.SRE_Match object; span=(11, 13), match='70'>
--------------------------------------------------------------------------------------------------------------------------------------------------------------
match对象的属性和方法
- 属性变量
- pos 匹配的目标字符串开始位置
- endpos 匹配的目标字符串结束位置
- re 正则表达式
- string 目标字符串
- lastgroup 最后一组的名称
- lastindex 最后一组的序号
- 属性方法
-
span() 获取匹配内容的起止位置
-
start() 获取匹配内容的开始位置
-
end() 获取匹配内容的结束位置
-
groupdict() 获取捕获组字典,组名为键,对应内容为值
-
groups() 获取子组对应内容
-
group(n = 0)
功能:获取match对象匹配内容 参数:默认为0表示获取整个match对象内容,如果是序列号或者组名则表示获取对应子组内容 返回值:匹配字符串
import re pattern = r"(ab)cd(?P<pig>ef)" regex = re.compile(pattern) obj = regex.search("abcdefghi") # match对象 # 属性变量 print(obj.pos) # 目标字符串开始位置 # 0 print(obj.endpos) # 目标字符串结束位置 # 9 print(obj.re) # 正则 # re.compile('(ab)cd(?P<pig>ef)') print(obj.string) # 目标字符串 # abcdefghi print(obj.lastgroup) # 最后一组组名 # pig print(obj.lastindex) # 最后一组序号 #2 print("=====================================") # 属性方法 print(obj.span()) # 匹配到的内容在目标字符串中的位置 # (0, 6) print(obj.start()) # 0 print(obj.end()) # 6 print(obj.groups()) # 子组内容对应的元组 # ('ab', 'ef') print(obj.groupdict()) # 捕获组字典 # {'pig': 'ef'} print(obj.group()) # 获取match对象内容 # abcdef print(obj.group('pig')) # ef
flags扩展功能标志(只有使用re调用的方法才有flags参数 --> re.func(flags=0))
-
使用函数:re模块调用的匹配函数。如:re.compile,re.findall,re.search....
-
作用:扩展丰富正则表达式的匹配功能
-
常用flag
A == ASCII 元字符只能匹配ascii码
I == IGNORECASE 匹配忽略字母大小写
S == DOTALL 使 . 可以匹配换行
M == MULTILINE 使 ^ $可以匹配每一行的开头结尾位置
-
使用多个flag
方法:使用按位或连接
e.g. : flags = re.I | re.A