likes
comments
collection
share

python|正则表达式-3:基本特殊字符含义

作者站长头像
站长
· 阅读数 13

我们此前已经写过2篇文章解释什么是python正则表达式,以及python re库的讲解,如果还未看过这两篇文章的小伙伴,不妨先看看如下文章:

python | 探寻python正则表达式-1:juejin.cn/post/722125…

python | 正则表达式re库常用方法介绍:juejin.cn/post/722173…

以便做到承上启下,无缝连接。

还是在此声明一点,该片文章基于的python版本为:

python|正则表达式-3:基本特殊字符含义

关于特殊字符,我们推荐查看python官方的文档: docs.python.org/zh-cn/3.7/l…

python|正则表达式-3:基本特殊字符含义

我们今天将要介绍正则表达式的特殊字符,以及含义,和相关的案例。

转义符

在正则表达式中,使用反斜杠``来将特殊字符转义成普通字符,例如文本中有*,我们就想查询字符*,就可以使用*进行转义、还例如特殊字符[]都可以使用如下方式进行转义,这里列举2个例子:

假设有一串电话号码,但是屏蔽了中间4位,为: 180-****-3281,我们需要匹配进行完整字符串匹配(不用正则特殊字符),应当如何来匹配*呢?

如果我们直接写re.findall("180-****-3281",'180-****-3281')则会报错,因为在正则表达式中,*代表前一个字符出现0次或者无数次,所以多个*在一起没有意义,会导致编译正则表达式不过。

如果想将*就当成普通字符进行匹配,可以在此之前使用``来转义一下,例如:

import re

print(re.findall("180-****-3281",'180-****-3281'))

这样就可以将这个完整给匹配出来,运行结果为:

python|正则表达式-3:基本特殊字符含义

再来一个例子,假设有一个日志文件logs.txt

python|正则表达式-3:基本特殊字符含义

我们想匹配下[err]类型日志出现的整行。这个应该如何匹配呢?

我们可以使用re.match来做匹配开头为[err]的即可,例如:

import re

for line in open('logs.txt'):
    if re.match('[err]',line):
        print(line)

运行后,我们可以看到,可以正常输出记录。

python|正则表达式-3:基本特殊字符含义

多个正则表达式

可以使用特殊字符|来将多个正则表达式分开,例如: re1|re2就会匹配re1正则表达式 和 re正则表达式。

例如: 针对一串字符串,我们即想匹配pdudo又想匹配juejin,则我们可以使用pdudo|juejin

import re

print(re.findall("pdudo|juejin","hello juejin , hello pdudo"))

上述代码,执行后,输出结果为:

python|正则表达式-3:基本特殊字符含义

任意字符

可以使用特殊字符.来匹配一个任何一个特殊字符,通常和特殊字符*配合使用。

例如使用pd.do即可匹配pdudopdodo等,代码如下:

re.findall("pd.do","pdudo pdodo")

0次或多次前面的出现的字符串或者正则表达式

使用*可以匹配0次或者多次前一个字符串,通常和特殊字符.配合使用。

这个例子放到后面来讲解。

字符串起始和结尾部分

可以使用特殊字符^来匹配字符串起始,使用$来匹配字符串结尾,例如想匹配以p开头的并且以d结尾的字符串,可以这样写:

re.findall("p.*o","pdudo")

来自合集的内容

可以使用[...]来匹配字符集的单一字符,其中...可以是范围,例如:

[0-9]: 将匹配 0-9 中的任何一个值

[abc]: 将匹配abc中的任何一个字符串

[^abc]: 在前面加一个取反符号^,则不匹配范围的字符

这个例子放到后面来讲解。

n次前面出现的字符串或者正则表达式

可以使用{n}来匹配前面出现的n次表达式,例如: a{3}将匹配为aaa

例如想匹配电话号码:

re.findall("1[0-9]{2}-[0-9]{4}-[0-9]{4}","180-2134-1234")

上述,[0-9]代表范围,后面{n}代码前一个字符出现n次。

另存为数组

使用(...)会将匹配到的正则表达式,另存为自组,在爬虫用的比较多,这里举个例子:

import re
print(re.findall("^下载链接为:(.*),请用迅雷下载$","下载链接为:www.juejin.cn/123/456,请用迅雷下载"))

上述会匹配以下载链接为:开头,并且以,请用迅雷下载为结尾的字符串,且将匹配到的信息另存为数组,即(.*)中间的内容。

所以执行的结果为:

python|正则表达式-3:基本特殊字符含义

总结

这篇文章,详细介绍了python正则表达式特殊字符的含义,以及其用法。 再结合之前的2篇文章,相信你会对python正则表达式有一个初步的了解。