1 re模块的作用
个人觉得就是按照给定的条件,在文本中去寻找匹配对应的字符
re模块十分强大,提供的正则规则也非常多,网上有很多辅助和测试工具,现在有ai就更加方便了,不过一些基础的使用最好还是了解下
2 正则表达式
个人理解,正则表达式就是寻找、匹配的规则或者条件,它是一个字符串的形式
首先,一些普通字符本身就能作为正则表达式与他自身匹配
如在re模块, 'python' 就能匹配'python'
如上,match()匹配到就会返回一个object,没有匹配到就是返回None
单纯只是用自身作为条件去匹配自身,在实际工作中用得比较少,通常是在一大串文本信息中找到一小串字符,我们常常需要一些特殊的字符来表示正则
一些特殊字符表示的匹配规则
句点
句点(.),与除换行符以外的其它字符都匹配,而且只与一个字符匹配,不与0或者多个字符匹配。
如 '.ython'可与 'aython'匹配,也可以和'bython'、'eython'匹配,但是不与'ython'、'abython匹配'
字符集
用方括号创建一个字符集,这样字符集与其包含的字符都匹配
[ab]ython 可匹配 aython、bython
[a-z] 与小写字母a-z中的任何一个字符都匹配
[A-Z]则是匹配一个大写字母
[a-zA-z0-9]则是匹配一个大写或者一个小写或者一个数字
排除一些字符
[^ab]除去a b外的任何一个字符都匹配
注意,字符集匹配的都是一个字符
二选一和子模式
可与2个匹配规则中的任意一个匹配 就要用2选一的管道字符(|)
如
子模式
对正则字符串内的部分字串做另外的处理
如上面子模式的例子 由于有共同的字符ab,不同的是ab后的匹配规则,也可以有如下表示
子模式常与其他模式一起用,如后面的可选模式和重复模式
可选模式和重复模式
可选模式:在子模式前面加上问号,即匹配时可包含可不包含
重复模式
(pat)* pat可重复0 1或者多次
(pat)+ pat可重复1或多次
(pat){m,n} pat可以重复m-n次
对特殊字符进行转义
'baidu.com' 可以匹配字符串 baidu.com 。因为包含特殊字符句点(.),它还能匹配baiduacom baidubcom baidudcom baidugcom等文本
如果只想匹配字符串 baidu.com ,需要让特殊字符句点(.)变为普通字符,就像在字符串里面,用反斜杠把特殊字符转化为普通字符一样,正则表达里面也用反斜杠来把特殊字符转义为普通字符
即 'baidu\.com'
注意这里有两个斜杠,首先,baidu.com本身是个字符串,一个斜杠在字符串本身就是特殊字符,要表达出正则需要的一个斜杠,需要用两个斜杠,这是在字符串层面执行的转义 ,\变成
然后,在正则层面,.会把特殊字符句点(.)变成普通字符
正则也可以用原始字符串的形式,就不用字符串层面的转义了
r'baidu.com'
3 re模块中一些方法
compile(pat) 根据给定的正则字符串创建模式对象
search(pat,string) 根据正则字符串pat 在文本信息中进行匹配 结果为真 返回一个object,结果为假返回None
match(pat,string) 在字符串开头进行匹配
split(pat,string) 根据与正则匹配的字符来分割文本信息
findall(pat,string) 返回一个列表,包括所有的匹配到的子串
sub(pat,replace,string) 将在文本信息中匹配到的结果替换为replace
如上 re.compile(pat).search(string) 等价于 re.search(pat,string)
match()函数也是一样