yhw-miracle

python实现正则

痛点就是起点 writed in

本文为痛点就是起点原创文章,可以随意转载,但需注明出处。

python 通过 re 模块实现对正则表达式的支持,一般先将正则表达式的字符串形式编译为 Pattern 实例,然后使用 Pattern 实例处理文本并获得匹配结果,最后使用 Match 实例获得信息。

python 中常用的实现正则表达式匹配函数有两种调用方式 re 调用和 pattern 调用。

# re 调用
> 1. re.compile(string[,flag])
> 2. re.match(pattern, string[,flags])
> 3. re.search(pattern, string[,flags])
> 4. re.split(pattern, string[,maxsplit[,flags]])
> 5. re.findall(pattern, string[,flags])
> 6. re.finditer(pattern, string[,flags])
> 7. re.sub(pattern, repl, string[,flags[,count]])
> 8. re.subn(pattern, repl, string[,flags[,count]])
# pattern 调用
> 1. re.compile(string[,flag])
> 2. pattern.match(string[,flags])
> 3. pattern.search(string[,flags])
> 4. pattern.split(string[,maxsplit[,flags]])
> 5. pattern.findall(string[,flags])
> 6. pattern.finditer(string[,flags])
> 7. pattern.sub(repl, string[,flags[,count]])
> 8. pattern.subn(repl, string[,flags[,count]])

其中,flags 参数表示匹配模式,取值有以下几种情况,并且可以使用 “|” 同时使用多种匹配模式。

  • re.I: 忽略大小写
  • re.M: 多行模式,改变 “^” 和 “$” 的含义
  • re.S: 点任意匹配模式,改变 “.” 的含义
  • re.L: 使预定义字符类 \w\W\b\B\s\S 取决于当前区域设定
  • re.U: 使预定义字符类\w\W\b\B\s\S\d\D 取决于 unicode 定义的字符属性 6.re.X: 详细模式,这个模式下正则表达式可以是多行的,忽略空白符,并可以加入注释

以上 7 个函数在 re 模块中进行搜索匹配,如果需要获得匹配的数据,这时可以利用 Match 对象,Match 对象保存了正则表达式匹配的过程。Match 对象的属性有:

  • string: 匹配时使用的文本。
  • re: 匹配时使用的 pattern 对象。
  • pos: 文本中正则表达式开始搜索的索引。
  • endpos: 文本中正则表达式结束搜索的索引。
  • lastindex: 最后一个被捕获的分组在文本中的索引。
  • lastgroup: 最后一个被捕获的分组的别名。
  • group(group1,…): 获得一个或多个分组截获的字符串。
  • groups(): 以元组形式返回全部分组截获的字符串。
  • groupdict(): 返回以有别名的组的别名为键,以改组截获的子串为值的字典,没有别名的组不包含在内。
  • start(group): 返回指定的组截获的子串在 string 中的起始索引。
  • end(group): 返回指定的组截获的子串在 string 中的结束索引。
  • span(group): 返回 (start(group), end(group))。
  • expand(template): 将匹配到的分组代入 template 中然后返回。
import re

pattern = re.compile(r'(\w+) (\w+) (?P<word>.*)')

match = pattern.match('My website is 痛点就是起点.win.')

print('match.string:' + match.string)
print('match.re:', match.re)
print('match.pos:', match.pos)
print('match.endpos:', match.endpos)
print('match.lastindex:', match.lastindex)
print('match.lastgroup:', match.lastgroup)
print('match.group(1,2):', match.group(1, 2))
print('match.groups():', match.groups())
print('match.groupdict():', match.groupdict())
print('match.start(2):', match.start(2))
print('match.end(2):', match.end(2))
print('match.span(2):', match.span(2))
print("match.expand(r'\2 \1 \3'):", match.expand(r'\2 \1 \3')

python 正则
知识总结

欢迎关注,我们一起进行认知迭代!


痛点就是起点

© 2016 - 2020 基于 jekyll | Github Pags | iconfont By yhw-miracle