Python re 模块

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

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