python re正则表达式对象

什么是正则表达式对象

 re.compile(r"\d{3,9}") # 匹配数字,并且是3-9位的数字
 re.compile(r"^test\w*", re.I) # 匹配test开头的字符串,test不区分大小写
 re.compile(r"^t.*", re.S) # 匹配t开头后续匹配任意字符串(包括换行符)

正则表达对象的方法

Pattern.search(string[, pos[, endpos]])

  • 查找该正则表达式产生匹配的第一个位置并返回匹配对象,如果没有匹配到则返回None,
  • pos参数指定开始搜索的位置索引,默认为0,
  • endposc参数指定字符串搜索的结束位置
pattern = re.compile("s")
pattern.search("test")  #返回 <re.Match object; span=(2, 3), match='s'>
pattern.search("test",1,3)  # 返回 <re.Match object; span=(2, 3), match='s'>
pattern.search("test",1,2)  # 返回 None
pattern = re.compile("s.*")
pattern.search("test")  # 返回 <re.Match object; span=(2, 4), match='st'>

Pattern.match(string[, pos[, endpos]])

  • 如果字符串开头的零个或多个字符与此正则表达式匹配,则返回匹配对象, 否则返回None
pattern = re.compile("s.*")
pattern.match('test')   # 返回 None
pattern = re.compile("t.*")
pattern.match('test') # 返回 <re.Match object; span=(0, 4), match='test'>

Pattern.fullmatch(string[, pos[, endpos]])

  • 如果整个 string 与此正则表达式匹配,则返回匹配对象, 否则返回None
pattern = re.compile("t.*")
pattern.fullmatch('test') # 返回<re.Match object; span=(0, 4), match='test'>
pattern = re.compile("t.?")
pattern.fullmatch('test') # 返回 None

Pattern.split(string, maxsplit=0)

  • 用 pattern 分开 string,返回分割后的元素列表
  • maxsplit不等于0时,表示最多分割多少次
pattern = re.compile("s")
pattern.split('test') #返回 ['te', 't']
pattern = re.compile(r"\W+") # 任意非数字和字母
pattern.split('auto test, test') #返回['auto', 'test', 'test']
pattern.split('auto test, test', 1) #返回['auto', 'test, test']
pattern = re.compile(r"(\W+)") # 带括号
pattern.split('auto test, test') #返回['auto', ' ', 'test', ', ', 'test'], 包含分割的字符串

Pattern.findall(string[, pos[, endpos]])

  • 返回 pattern 在 string 中的所有非重叠匹配结果, 字符串列表或字符串元组列表的形式
  • 如果未匹配到返回空列表[]
pattern = re.compile(r"\W+") # 任意非数字和字母
pattern.findall('auto test, test') # 返回[' ', ', ']
pattern = re.compile(r"(\w+)=(\d+)")
pattern.findall('width=20, height=10') # 返回[('width', '20'), ('height', '10')]
pattern.findall('width=20, height=10',0, 10) # 返回[('width', '20')]
pattern.findall('width=20, height=10',0, 5) # 返回[]

Pattern.finditer(string[, pos[, endpos]])

  • 用法同findall, 不过返回的是匹配对象的迭代器

Pattern.sub(repl, string, count=0)

  • 返回通过 repl 替换在 string 最左边非重叠出现的 pattern 而获得的字符串
  • 如果没有匹配的则返回原string
  • repl可以是一个字符串也可以是函数
pattern = re.compile(r"\W+") # 任意非数字和字母
pattern.sub("-", 'auto test, test') # 返回 'auto-test-test'
pattern.sub("-", 'auto test, test', 1) # 返回 'auto-test, test'
pattern = re.compile(r"\s") # 匹配空白字符串
pattern.sub("-", 'autotest,test') # 返回 'autotest,test'
def dashrepl(matchobj):
...     if matchobj.group(0) == '-': return ' ' # 匹配对象group(0)等于 '-', 返回空
...     else: return '-'
pattern.sub(dashrepl, 'pro----gram-files') # 返回'pro-gram files'

Pattern.subn(repl, string, count=0)

  • 和sub() 相同,但是返回的是一个元组 (字符串, 替换次数).
pattern = re.compile(r"\W+") # 任意非数字和字母
pattern.subn("-", 'auto test, test')   # 返回 ('auto-test-test', 2)

正则表达式对象的属性

  • Pattern.flags:正则匹配标记
  • Pattern.groups: 捕获到的模式串中组的数量
  • Pattern.groupindex: 映射由 (?P<id>) 定义的命名符号组合和数字组合的字典
  • Pattern.pattern :返回正则表达式对象的原始字符串
pattern = re.compile(r"\W")
pattern.groups   #返回 0
pattern = re.compile(r"(\W)")
pattern.groups  #返回 1
pattern = re.compile(r"(\W) (\w)")
pattern.groups  #返回 2
pattern.pattern  #返回 '(\\W) (\\w)'
pattern = re.compile(r"(?P<one>\W) (?P<two>\w)")
pattern.groupindex   #返回mappingproxy({'one': 1, 'two': 2})

非重叠匹配 & 重叠匹配

import regex
regex.findall('ab.*',"ab abtest")  # 返回['ab abtest'], 非重叠匹配
regex.findall('ab.*',"ab abtest", overlapped=True) # 返回['ab abtest', 'abtest'] , 重叠匹配
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值