python学习笔记之--正式表达式模块re

2022-03-21  本文已影响0人  itsenlin

正则表达式

对于字符串匹配操作,最强大的工具还是正则表达式,但是如果不经常使用很容易忘记,还是需要多使用,掌握了正则表达式入门就可以满足工作中大部分的使用场景;如果想深入了解,可以参考正则表达式高级用法

Python语言中有专门的模块可以方便使用正则表达式来实现复杂的字符串操作,正式本文的主角--re模块

比较常用的使用方法

说明:re模块中定义了与正则表达式对象中方法同名的函数,可以实现同样的功能。如果需要多次使用这个正则表达式的话,使用 re.compile()和保存这个正则对象以便复用,可以让程序更加高效。

例如:

prog = re.compile(pattern)
result = prog.match(string)

等价于

result = re.match(pattern, string)

常用的接口总结

Flag变量

变量名 说明
re.Are.ASCII \w, \W, \b, \B, \d, \D, \s\S只匹配ASCII,而不是Unicode。这只对Unicode样式有效,会被byte样式忽略。相当于前面语法中的内联标志 (?a)
re.Ire.IGNORCASE 进行忽略大小写匹配;相当于内联标记 (?i)
re.Lre.LOCALE 由当前语言区域决定\w, \W, \b, \B 和大小写敏感匹配。这个标记只能对byte样式有效。对应内联标记(?L)
re.Mre.MULTILINE 样式字符 ^ 匹配字符串的开始,和每一行的开始(换行符后面紧跟的符号);样式字符 $ 匹配字符串尾,和每一行的结尾(换行符前面那个符号)。对应内联标记 (?m)
re.Sre.DOTALL 让 '.' 特殊字符匹配任何字符,包括换行符;如果没有这个标记,'.' 就匹配 除了 换行符的其他任意字符。对应内联标记(?s)
re.Sre.DOTALL 这个标记允许你编写更具可读性更友好的正则表达式。通过分段和添加注释。空白符号会被忽略。对应内联标记 (?x)
re.DEBUG 显示编译时的debug信息,没有内联标记。

接口

函数名 方法名 说明
re.search(pattern, string, flags=0) Pattern.search(string[, pos[, endpos]]) 扫描整个 字符串 找到匹配样式的第一个位置,并返回一个相应的 匹配对象。找不到就返回一个 None
re.match(pattern, string, flags=0) Pattern.match(string[, pos[, endpos]]) 如果 string 开始的0或者多个字符匹配到了正则表达式样式,就返回一个相应的 匹配对象。找不到就返回一个 None
re.fullmatch(pattern, string, flags=0) Pattern.fullmatch(string[, pos[, endpos]]) 与上个相比,要整个 string 匹配才可以。
re.split(pattern, string, maxsplit=0, flags=0) Pattern.split(string, maxsplit=0) 用 pattern 分开 string 。
re.findall(pattern, string, flags=0) Pattern.findall(string[, pos[, endpos]]) 查找所有匹配项,每个匹配项都不重叠,返回一个字符串列表;当pattern中有捕获组时返回元组列表。
re.finditer(pattern, string, flags=0) Pattern.finditer(string[, pos[, endpos]]) 功能同上,返回的是一个迭代器。
re.sub(pattern, repl, string, count=0, flags=0) Pattern.sub(repl, string, count=0) 返回通过使用 repl 替换在 string 最左边非重叠出现的 pattern 而获得的字符串。 如果样式没有找到,则不加改变地返回 string。 repl 可以是字符串或函数。
re.subn(pattern, repl, string, count=0, flags=0) Pattern.subn(repl, string, count=0) 同上,但是返回一个元组 (字符串, 替换次数)。

独有特性

search() vs. match()

理论上search()是可以替换match()

上一篇 下一篇

猜你喜欢

热点阅读