一文秒懂python正则表达式常用函数

2020-03-07 12:01:24王旭

导读: 正则表达式是处理字符串类型的"核武器",不仅速度快,而且功能强大。本文不过多展开正则表达式相关语法,仅简要 介绍 python中正则表达式常用函数及其使用方 法,以作快速查询浏览。

 

01 Re概览

Re模块是python的内置模块,提供了正则表达式在python中的所有用法,默认安装位置在python根目录下的Lib文件夹(如 ..PythonPython37Lib)。主要提供了3大类字符串操作方法:

字符查找/匹配 字符替换 字符分割

由于是面向字符串类型的模块,就不得不提到字符串编码类型。re模块中,模式串和搜索串既可以是 Unicode 字符串 (常用str类型) ,也可以是8位字节串 (bytes,2位16进制数字,例如xe5) , 但要求二者必须是同类型字符串。

02 字符串查找/匹配

预编译:compile

在介绍查找和匹配函数前,首先需要知道re的compile函数,该函数可以将一个模式串编译成正则表达式类型,以便后续快速匹配和复用

import re
pattern = re.compile(r'[a-z]{2,5}')
type(pattern) #re.Pattern

此例创建了一个正则表达式式对象 (re.pattern) ,命名为pattern,用于匹配2-5位小写字母的模式串。后续在使用其他正则表达式函数时,即可使用pattern进行方法调用。

匹配:match

match函数用于从文本串的起始位置开始匹配,若匹配成功,则返回相应的匹配对象,此时可调用group()方法返回匹配结果,也可用span()方法返回匹配起止下标区间;否则返回None

import re
pattern = re.compile(r'[a-z]{2,5}')
text1 = 'this is a re test'
res = pattern.match(text1)
print(res) #<re.Match object; span=(0, 4), match='this'>
if res:
 print(res.group()) #this
 print(res.span()) #(0, 4)
text2 = '是的, this is a re test'
print(pattern.match(text2))#None

match函数还有一个变形函数fullmatch,当且仅当模式串与文本串刚好全部匹配时,返回一个匹配对象,否则返回None

搜索:search

match只提供了从文本串起始位置匹配的结果,如果想从任意位置匹配,则可调用search方法,与match方法类似,当任意位置匹配成功,则立即返回一个匹配对象,也可调用span()方法获取起止区间、调用group方法获得匹配文本串

import re
pattern = re.compile(r's[a-z]{2}')
text1 = 'this is a re test'
res = pattern.search(text1)
print(res) #<re.Match object; span=(4, 7), match=' is'>
if res:
 print(res.group()) #is
 print(res.span()) #(4, 7)
pattern2 = re.compile(r's[a-z]{5}')
text2 = '是的,this is a re test'
print(pattern2.search(text2))#None

match和search均用于匹配单个结果,唯一区别在于前者是从起始位置开始匹配,而后者从任意位置匹配,匹配成功则返回一个match对象。