Python的re模块
前言
学习《集体智慧编程》的过程中,在第三章遇到处理 RSS 订阅源并将 HTML 标记剥离提取文字的函数,用到了 re 模块,对照 python3.7 关于 re 的官方文档看一下,具体的学习还要看一下《精通正则表达式》。
正则表达式语法
-
正则表达式可以拼接:若 A、B 都是正则表达式,那么 AB 也是正则表达式;若字符串 p 匹配 A 并且字符串 q 匹配 B,那么 pq 可以匹配 AB。
-
正则表达式包含普通和特殊字符。特殊字符如 '|' 或 '(',既可以表示普通含义也可以包含正则表达式的解释;重复修饰符 (*, +, ?, {m,n}, 等) 不能直接嵌套,要应用一个内层重复嵌套,可以使用括号。
-
特殊字符
字符 意义 . 匹配除了换行的任意字符 ^ 匹配字符串开头 $ 匹配字符串尾或换行符前一个字符 * 对它前面的正则式匹配 0 到任意次重复 + 对它前面的正则式匹配 1 到任意次重复 ? 对它前面的正则式匹配 0 到 1 此重复 *?, +?, ?? 在修饰符之后添加 ? 将使样式以非贪婪方式或最小方式匹配 {m} 对其之前的正则式指定匹配 m 个重复;少于 m 会匹配失败 {m,n} 对正则式进行 m 到 n 此匹配;在 m 和 n之间取尽量多,但不能少于 m 或大于 n {m,n}? 非贪婪模式,匹配尽量少的字符次数 转义特殊字符;高度推荐,就算最简单的表达式也要使用原始字符串 (r'raw') [] 表示一个字符集合。在一个集合中: 字符可以单独列出,如 [amk] 匹配 'a','m','k' 可以表示字符范围,[a-z]、[0-5][0-9]匹配从 00 到 59 的两位数 特殊字符在集合中失去特殊含义,只是普通字符 字符类如 w 或 s 在集合可以被接受 对集合取反可以匹配不在集合的字符,[^5]将匹配所有字符,除了 5 。
模块内容
-
re.compile(pattern, flags=0)
将正则表达式的样式编译为一个正则表达式对象(正则对象),可以用于匹配,通过这个对象的方法 match(), search() 等
-
re.search(pattern, string, flags=0)
检查字符串任意位置,找到匹配样式的第一个位置,返回相应的匹配对象
-
re.match(pattern, string, flags=0)
检查字符串开头是否匹配样式
-
re.split(pattern, string, maxsplit=0, flags=0)
用 pattern 分开 string,最多进行 maxsplit 次分隔
-
re.sub(pattern, repl, string, count=0, flags=0)
使用 repl 替换 string 中满足 pattern 的字符
正则对象
编译后的正则表达式对象支持search、match等方法,用法如上
匹配对象
match.group()