Python re 模块

---------------------------------------------------------------------------------------------------------------

regex = compile(pattern,flags = 0) 功能: 生成正则表达式对象 参数: pattern 正则表达式 flags 功能标志位,扩展正则表达式的匹配 返回值: 正则表达式对象

 

 

 

 

 

re模块与正则表达式对象拥有的"相同"方法: 

findallsplitsubsubnfinditerfullmatchmatchsearch

 

 

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']
findall

-----------------------------------------------------------------------------------------------------------------------------------------

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

-----------------------------------------------------------------------------------------------------------------------------------------

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

 

 

 

 

 

 

 

 

 

 

finditerfullmatchmatchsearch

     --->   会生成match对象    ---> match对象的属性与方法有:  

属性变量endendposstringrelastgrouplastindex
属性方法spanstartendgroupdictgroupsgroup

 

 

 

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
finditer_fullmatch_match_search

 

一个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对象的属性和方法

  1. 属性变量
  • pos 匹配的目标字符串开始位置
  • endpos 匹配的目标字符串结束位置
  • re 正则表达式
  • string 目标字符串
  • lastgroup 最后一组的名称
  • lastindex 最后一组的序号
  1. 属性方法
  • 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
match对象属性和方法

 

flags扩展功能标志(只有使用re调用的方法才有flags参数 --> re.func(flags=0))

  1. 使用函数:re模块调用的匹配函数。如:re.compile,re.findall,re.search....

  2. 作用:扩展丰富正则表达式的匹配功能

  3. 常用flag

A == ASCII 元字符只能匹配ascii码

I == IGNORECASE 匹配忽略字母大小写

S == DOTALL 使 . 可以匹配换行

M == MULTILINE 使 ^ $可以匹配每一行的开头结尾位置

    1. 使用多个flag

      方法:使用按位或连接
      e.g. : flags = re.I | re.A

 

转载于:https://www.cnblogs.com/NeverYa/p/11369011.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值