白水河
白水河
3月前 · 4 人阅读

首先说明正则表达式是什么:

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些需要的字符.

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。

re 模块使 Python 语言拥有全部的正则表达式功能。

compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。

re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。

在python中同样支持正则表达式,在re模块中储存了对应的正则对应方法,接下来就简单介绍一下正则表达式的入门知识.

首先,我们要明白我们的需求是什么,比如在key="daiuhfaiuhugaysqiehoiuuiwug"(随便打得)这一串字符串中匹配出自己想要的字符:

假设我们想匹配"gays"这么一串字符串:

import rekey = r"daiuhfaiuhugaysqiehoiuuiwug"

answer = r"gays"final1 = re.compile(answer

result = re.search(final1,key)

print(result.group(0))

结果:

这就是最简单的字符匹配的实现

可能有的朋友不知道语句中compile的作用


代码中re.compile将正则表达式(以字符串书写的)转换为模式对象,可以实现更加有效的匹配,当成一个编译函数即可,我们之后会详细说,这里还是要推荐下小编的Python学习裙:‘’五八八,零九零,九四二‘’不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2018最新的Python资料和0基础入门教程,欢迎初学和进阶中的小伙伴。在不忙的时间我会给大家解惑。

大家可能还有一个疑惑点就是在代码中的"r",这个字符的意思是将字符串中的转义字符过滤,不会进行转义,比如" "等等的特殊字符,不然很难匹配到,在上述代码中不存在转义字符,故删除r字符结果也没变.

PS:正则表达式是区分大小写的,在python里面也是,所以一定注意

介绍另一种正则的用法

import rekey = "daiuhfaiuhuc我找到你了!cgaysqiehoiuuiwugd"

answer = r"c.+c"final1 = re.compile(answer)

result = re.search(final1,key)

print(result.group(0))


结果如上所示,引出关于"."的描述,在正则表达式中,"."可以表示所有字符,包括其本身,所以在匹配知道特定区域而不知道特定内容的字符串中,可以使用"."将所有的匹配成功得字符输出

如果我们要用特殊的形式输出匹配的字符呢?比如下面这个代码可以输出包含所有匹配到的字符串的列表:

import rekey = "daiuhfaiuhuc我找到你了!cgaysqiehoiuuiwugd"

answer = r"c.+c"final1 = re.compile(answer)

result = re.search(final1,key)

print(final1.findall(key))

当然,你也可以在他后面加上对应的索引拿到其元素.

print(final1.findall(key)[0])


将上述代码换入程序中的结果,输出了list[0]元素

这时候有朋友可能会疑惑,既然"."用来匹配所有字符,那么它本身用什么匹配?

相信大多数有编程基础的朋友都知道"\"的作用

没错,就是转义,在python中的正则也可以这么用:

import re

key = "daiuhfaiuhuc我找到你了:[.]cgaysqiehoiuuiwugd"

answer = r"."

final1 = re.compile(answer)

result = re.search(final1,key)

print(final1.findall(key))

在前面的实例中,我们在下面代码中运用了"+",这里有必要作一下说明,在这里的+指的是对前方的字符进行多次匹配,而如果单独一个"."是没法将所有字符统统匹配出来的

只有一个空列表输出,在没有+的情况下.

在使用的情况下,可以匹配到在*号前的字符0次或者多次:

import re

key = "get it better,betterr"

answer = r"better*"

final1 = re.compile(answer)

result = re.search(final1,key)

print(final1.findall(key))


以上使用了*匹配法则

在要匹配的字符串中,有better和betterr这两个需要匹配出来的,那么如果只匹配一个r后面的另一个字符串便无法得到匹配,所以在python中定义了*可以匹配在其之前的字母0次或者多次.

上述我们说过,在python中,是区分大小写的,所以,如果我们要匹配同时大小写的字符串,我们就需要用到"[]"

[Bb]表示匹配大写小写的字母b

以此类推

import rekey = "get it Better,betterr"answer = r"[Bb]etter*"final1 = re.compile(answer)result = re.search(final1,key)print(final1.findall(key))

即可得到我们想要的结果:

收藏 0
关键词: re final1 匹配 key 正则表达式 answer
评论