不说废话,直接开整
import re
元字符
.
匹配任意字符(不包括换行符)
|
逻辑或操作符 ,比如 a|b 代表可匹配 a 或者 b
[]
字符集,一个字符的集合,可匹配其中任意一个字符
[^]
对字符集取反
-
定义[]
里的一个字符区间
()
对表达式进行分组,将其内容当作以一个整体,并获得匹配的值
\
转义字符,跟在其后的字符将失去作为特殊元字符的含义
特殊字符
预定义匹配字符集
\d
匹配一个数字, 相当于 [0-9]
\w
匹配数字、字母、下划线中任意一个字符, 相当于 [a-zA-Z0-9_]
\s
匹配任意空白字符, 相当于 [ \t\n\r\f\v]
\D
匹配非数字,相当于 [^0-9]
\W
匹配非数字、字母、下划线中的任意字符,相当于 [^a-zA-Z0-9_]
\S
匹配非空白字符,相当于 [^ \t\n\r\f\v]
重复匹配
{n}
表达式重复n次
{m,n}
表达式至少重复m次,最多重复n次
{m,}
表达式至少重复m次
?
匹配前一个元字符0到1次
+
匹配前一个元字符1到多次
*
匹配前一个元字符0到多次
添加一个函数,方便测验
import re
def fn(ptn, lst):
for x in lst():
result = re.match(ptn, x)
if result:
print(x, '匹配成功','结果为:', result.group())
else:
print(x, '匹配失败!')
位置匹配
^
在字符串开始的地方匹配,符号本身不匹配任何字符
$
在字符串结束的地方匹配,符号本身不匹配任何字符
\b
匹配位于单词开始或结束位置的空字符串
\B
匹配不位于单词开始或结束位置的空字符串
re模块内函数
compile函数
compile(pattern, flags=0)
这个⽅法是re模块的工厂法,⽤于将字符串形式的正则表达式编译为Pattern模式对象,可以实现更加效率的匹配。第二个参数flag是匹配模式 使用compile()完成一次转换后,再次使用该匹配模式的时候就不能进行转换了。经过compile()转换的正则表达式对象也能使用普通的re⽅法
search函数
search(pattern, string, flags=0)
在文本内查找,返回第一个匹配到的字符串。它的返回值类型和使用方法与match()是一样的,唯一的区别就是查找的位置不用固定在文本的开头
findall函数
findall(pattern, string, flags=0)
作为re模块的三大搜索函数之一,findall()和match()、search()的不同之处在于,前两者都是单值匹配,找到一个就忽略后面,直接返回不再查找了。而findall是全文查找,它的返回值是一个匹配到的字符串的列表。这个列表没有group()方法,没有start、end、span,更不是一个匹配对象,仅仅是个列表!如果一项都没有匹配到那么返回一个空列表
split函数
split(pattern, string, maxsplit=0, flags=0)
re模块的split()方法和字符串的split()方法很相似,都是利用特定的字符去分割字符串。但是re模块的split()可以使用正则表达式,因此更灵活,更强大
split有个参数maxsplit,用于指定分割的次数
sub函数
sub(pattern, repl, string, count=0, flags=0)
sub()方法类似字符串的replace()方法,用指定的内容替换匹配到的字符,可以指定替换次数
分组功能
Python的re模块有一个分组功能。所谓的分组就是去已经匹配到的内容再筛选出需要的内容,相当于二次过滤。实现分组靠圆括号(),而获取分组的内容靠的是group()、groups(),其实前面我们已经展示过。re模块里的积个重要方法在分组上,有不同的表现形式,需要区别对待