python正则表达式方法match(),search(),findall(),sub(),compile()(官方文档解释)一分钟看懂

match()在官方文档中是这样定义的

如果 string 开始的0或者多个字符匹配到了正则表达式样式,就返回一个相应的 匹配对象 。 如果没有匹配,就返回 None ;注意它跟零长度匹配是不同的。

注意即便是 MULTILINE 多行模式, re.match() 也只匹配字符串的开始位置,而不匹配每行开始。

如果你想定位 string 的任何位置,使用 search() 来替代

简而言之,match()方法是从字符串的开头开始匹配的,一旦开头不匹配,那么整个匹配就失败

search()在官方文档中是这样定义的

扫描整个 字符串 找到匹配样式的第一个位置,并返回一个相应的 匹配对象。如果没有匹配,就返回一个 None ; 注意这和找到一个零长度匹配是不同的。

简而言之,search()在匹配时会扫描整个字符串,然后返回第一个重新匹配的结果,也就是说,正则表达式可以是字符串的一部分

findall()在官方文档中是这样定义的

扫描二维码关注公众号,回复: 8983114 查看本文章

findall(patternstringflags=0)

对 string 返回一个不重复的 pattern 的匹配列表, string 从左到右进行扫描,匹配按找到的顺序返回。

如果样式里存在一到多个组,就返回一个组合列表;就是一个元组的列表(如果样式里有超过一个组合的话)。空匹配也会包含在结果里。

简而言之,search()会搜索整个字符串,然后返回所有匹配内容。

sub()在官方文档中是这样定义的

re.sub(patternreplstringcount=0flags=0)

返回通过使用 repl 替换在 string 最左边非重叠出现的 pattern 而获得的字符串。 如果样式没有找到,则不加改变地返回 string。 repl 可以是字符串或函数;如为字符串,则其中任何反斜杠转义序列都会被处理。 也就是说,\n 会被转换为一个换行符,\r 会被转换为一个回车附,依此类推。 未知的 ASCII 字符转义序列保留在未来使用,会被当作错误来处理。 其他未知转义序列例如 \& 会保持原样。 向后引用像是 \6 会用样式中第 6 组所匹配到的子字符串来替换。

如果 repl 是一个函数,那它会对每个非重复的 pattern 的情况调用。这个函数只能有一个 匹配对象 参数,并返回一个替换后的字符串。

可选参数 count 是要替换的最大次数;count 必须是非负整数。如果忽略这个参数,或者设置为0,所有的匹配都会被替换。空匹配只在不相临连续的情况被更替,所以 sub('x*', '-', 'abxd') 返回 '-a-b--d-' 。

在字符串类型的 repl 参数里,如上所述的转义和向后引用中,\g<name> 会使用命名组合 name,(在 (?P<name>…) 语法中定义) \g<number> 会使用数字组;\g<2> 就是 \2,但它避免了二义性,如 \g<2>0。 \20 就会被解释为组20,而不是组2后面跟随一个字符 '0'。向后引用 \g<0> 把 pattern 作为一整个组进行引用。

是不是有点繁琐,其实蛮简单,我们主要用到前三个参数sub(patternreplstring),后面可选参数很少用

简而言之,pattern是要匹配目标的正则表达式,reple是替换匹配目标的,string是正则表达式要匹配的文本。

compile()是将一个正则表达式编译成一个正则表达式对象,简而言之,就是将正则表达式内容封装起来。

发布了70 篇原创文章 · 获赞 25 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/a66666_/article/details/103413528
今日推荐