python |
您所在的位置:网站首页 › 正则表达式∧含义 › python |
我们此前已经写过2篇文章解释什么是python正则表达式,以及python re库的讲解,如果还未看过这两篇文章的小伙伴,不妨先看看如下文章: python | 探寻python正则表达式-1:juejin.cn/post/722125… python | 正则表达式re库常用方法介绍:juejin.cn/post/722173… 以便做到承上启下,无缝连接。 还是在此声明一点,该片文章基于的python版本为: 关于特殊字符,我们推荐查看python官方的文档: docs.python.org/zh-cn/3.7/l… 我们今天将要介绍正则表达式的特殊字符,以及含义,和相关的案例。 转义符在正则表达式中,使用反斜杠``来将特殊字符转义成普通字符,例如文本中有*,我们就想查询字符*,就可以使用*进行转义、还例如特殊字符[和]都可以使用如下方式进行转义,这里列举2个例子: 假设有一串电话号码,但是屏蔽了中间4位,为: 180-****-3281,我们需要匹配进行完整字符串匹配(不用正则特殊字符),应当如何来匹配*呢? 如果我们直接写re.findall("180-****-3281",'180-****-3281')则会报错,因为在正则表达式中,*代表前一个字符出现0次或者无数次,所以多个*在一起没有意义,会导致编译正则表达式不过。 如果想将*就当成普通字符进行匹配,可以在此之前使用``来转义一下,例如: import re print(re.findall("180-****-3281",'180-****-3281'))这样就可以将这个完整给匹配出来,运行结果为: 再来一个例子,假设有一个日志文件logs.txt 我们想匹配下[err]类型日志出现的整行。这个应该如何匹配呢? 我们可以使用re.match来做匹配开头为[err]的即可,例如: import re for line in open('logs.txt'): if re.match('[err]',line): print(line)运行后,我们可以看到,可以正常输出记录。 可以使用特殊字符|来将多个正则表达式分开,例如: re1|re2就会匹配re1正则表达式 和 re正则表达式。 例如: 针对一串字符串,我们即想匹配pdudo又想匹配juejin,则我们可以使用pdudo|juejin。 import re print(re.findall("pdudo|juejin","hello juejin , hello pdudo"))上述代码,执行后,输出结果为: 可以使用特殊字符.来匹配一个任何一个特殊字符,通常和特殊字符*配合使用。 例如使用pd.do即可匹配pdudo、pdodo等,代码如下: 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正则表达式特殊字符的含义,以及其用法。 再结合之前的2篇文章,相信你会对python正则表达式有一个初步的了解。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |