Python-re模块

re模块的定义

re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的

re模块的常用方法

方法描述返回值
compile(pattern)根据包含正则表达式的字符串创建模式对象re对象
search(pattern, string)在字符串中查找 。第一个匹配到的对象或者None返回一个match对象
match(pattern, string)在字符串的开始处匹配模式。 在字符串开头匹配到的对象或者None返回一个match对象
findall(pattern, string,flags)列出字符串中模式的所有匹配项所有匹配到的字符串列表
finditer(pattern, string,flags)将所有匹配到的项生成一个迭代器所有匹配到的字符串组合成的迭代器
match.group(index)将match对象拆分成字符串。不写index默认是0返回match object中的字符串/元组
match.groups()将match对象转换成元组返回由所有分组匹配到的字符串组成的tuple。
match.start(index)没有参数时,返回匹配到的字符串的起始位置。指定参数(整数)时,返回该分组匹配到的字符串的起始位置返回int类型
match.end(index)没有参数时,返回匹配到的字符串的结束位置。指定参数(整数)时,返回该分组匹配到的字符串的结束位置。返回int类型
match.span(index)返回一个二元tuple表示匹配到的字符串的范围,即(start, end)返回元组
split(pattern, string)根据模式的匹配项来分割字符串分割后的字符串列表
sub(repl, string,count=0)将字符串中所有的pat的匹配项用repl替换完成替换后的新字符串
subn(pat,repl, string)在替换字符串后,同时报告替换的次数完成替换后的新字符串及替换次数
escape(string)将字符串中所有特殊正则表达式字符串转义转义后的字符串
purge(pattern)清空正则表达式
template(pattern)编译一个匹配模板模式对象
fullmatch(pattern, string)match方法的全字符串匹配版本类似match的返回值

例如

查询模块

#compile(pattern)  根据包含正则表达式的字符串创建模式对象    re对象  
r = re.compile("[0-9]")
print(r) #返回一个编译正则的re对象

"""
re.IGNORECASE:忽略大小写,同 re.I。
re.MULTILINE:多行模式,改变^和$的行为,同 re.M。
re.DOTALL:点任意匹配模式,让'.'可以匹配包括'\n'在内的任意字符,同 re.S。
re.LOCALE:使预定字符类\w \W \b \B \s \S 取决于当前区域设定,同 re.L。
re.ASCII:使 \w \W \b \B \s \S 只匹配 ASCII 字符,而不是Unicode 字符,同 re.A。
re.VERBOSE:详细模式。
"""
import re 
b = re.compile(r"[a-w]",re.I)
a = b.findall("ADbcG")
print(a) #['A', 'D', 'b', 'c', 'G']

a = re.compile(r"""\d + # the integral part
                    \. # the decimal point
                    \d * # some fractional digits""", 
                    re.X)                
b = re.compile(r"\d+\.\d*")

#search(pattern, string)    在字符串中查找    第一个匹配到的对象或者None  
#扫描整个字符串,并返回它找到的第一个匹配(Match object)
r = re.compile("[0-9]")
a = r.search("123abc456")
print(a) #<re.Match object; span=(0, 1), match='1'>

#match(pattern, string) 在字符串开头匹配到的对象或者None      返回一个match对象  
r = re.compile("[0-9]")
a = r.match("123abc456") 
#a = r.match("123abc456")  #开头不是数字,所以输出None
print(a) #<re.Match object; span=(0, 1), match='1'>

#findall(pattern, string,flags)    列出字符串中模式的所有匹配项    所有匹配到的字符串列表     
r = re.compile("[0-9]")
a = r.findall("123abc4567")
print(a) #['1', '2', '3', '4', '5', '6', '7']

#  finditer(pattern, string,flags)    将所有匹配到的项生成一个迭代器   返回一个迭代器
r = re.compile("[0-9]")
a = r.finditer("123abc456")
print(a) #<callable_iterator object at 0x0000020C599BFA88>
print(list(a))
"""
[<re.Match object; span=(0, 1), match='1'>, 
<re.Match object; span=(1, 2), match='2'>, 
<re.Match object; span=(2, 3), match='3'>, 
<re.Match object; span=(6, 7), match='4'>, 
<re.Match object; span=(7, 8), match='5'>, 
<re.Match object; span=(8, 9), match='6'>]
"""

match相关方法

#match.group(index)将match对象拆分成字符串。不写index默认是0返回match object中的字符串  
"""
分组编号从1开始,从左往右,每遇到一个左括号,分组编号+1。
组0总是存在的,它就是整个表达式。
没有参数时,group1默认为0,这时返回整个匹配到的字符串。
"""
#空格不要忘了
r = re.compile(r"(\w+) (\w+)")
a = r.match("I LOvE you")
print(a)  #<re.Match object; span=(0, 6), match='I LOvE'>
print(a.group()) #I LOvE   默认是0
print(a.group(1)) #I
print(a.group(2)) #LOvE
print(a.group(3)) #报错

"""
 指定多个参数的时候,就返回一个元组
"""
print(a.group(1,2)) #('I', 'LOvE')

r = re.compile(r"(\w+) (\w+)")
a = r.match("I LOvE you")
print(a.groups()) #('I', 'LOvE')

#match.start(index)没有参数时,返回匹配到的字符串的起始位置。指定参数(整数)时,返回该分组匹配到的字符串的起始位置
r = re.compile(r"(\w+) (\w+)")
a = r.match("I LOvE you") 
print(a.start()) #0  
print(a.start(2)) #2  第二个单词的起始位置是2,下标从0开始

#match.end(index)
r = re.compile(r"(\w+) (\w+)")
a = r.match("I LOvE you") 
print(a.end()) #6
print(a.end(2)) #6
print(a.end(1))  #1

r = re.compile(r"(\w+) (\w+)")
a = r.match("I LOvE you") 
print(a.span()) #(0, 6)
print(a.span(1)) #(0, 1)
print(a.span(2)) #(2, 6)

拆分

#split(pattern, string)    根据模式的匹配项来分割字符串    分割后的字符串列表  
#意思是匹配到大写的字母就拆分
pattern = re.compile(r"[A-Z]+")
m = pattern.split("abcDefgHijkLmnoPqrs")
print(m) #['abc', 'efg', 'ijk', 'mno', 'qrs']

替换

"""       
sub(repl, string,count=0)   将字符串中所有的pat的匹配项用repl替换 |完成替换后的新字符串           |
repl可以是一个字符串,也可以是一个函数。
count用于指定最多替换次数,不指定时全部替换。
"""   
r = re.compile(r"like", re.I)
#s1 = r.sub(r"love", "I like you, do you like me?")  #I love you, do you love me?
#最多替换1次,所以把一个like替换了
s1 = r.sub(r"love", "I like you, do you like me?",count=1)
print(s1) #I love you, do you like me?


#subn(repl, string) | 在替换字符串后,同时报告替换的次数    | 完成替换后的新字符串及替换次数 |
#同sub(),只不过返回值是一个二元tuple,即(sub函数返回值,替换次数)。
r = re.compile(r"like", re.I)
"""
s1 = r.subn(r"love", "I like you, do you like me?")
print(s1) #('I love you, do you love me?', 2)
"""
s1 = r.subn(r"love", "I like you, do you like me?",count=1)
print(s1) #('I love you, do you like me?', 1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值