让我们来谈谈正则表达式｡
正则表达式并不是Python所独有的｡
事实上, 你可以在所有的编程语言中看到它们｡
但是我会很快地教你们正则表达式,
因为它们非常有用, 特别是当你在做验证的时候, 比如说,
检查某人是否输入了正确的电子邮件, 或者你有密码要求, 或者你想检查一段文本中是否存在一段字符串｡
这就是我们在这段视频中要探讨的东西｡
一般表示式｡
它们是什么？
幸运的是, Python自带了正则表达式模块｡
记住, 正则表达式并不是Python特有的｡
你几乎可以在任何语言中使用它们, 但是它们对于在一段文本中查找内容非常有用｡
假设这里有一个字符串, 我们可以在其中进行字符串搜索.
下一个, 请｡
我们走吧｡
现在, 假设我想在这里搜索一些东西｡
首先, 我能做这样的事情吗？
我能说搜索吗？
在字符串中｡
让我们在这里打印｡
如果我单击“运行”｡
我得到真实｡
这是一个简单的方法来搜索字符串中的内容｡
那么, 我们为什么还要使用正则表达式呢？
正则表达式的功能比这个更强大, 因为我们可能想搜索在字符串中搜索的次数.
或者我们有一个复杂的字符串｡
让我来告诉你我的意思｡
我们使用正则表达式的方式就是使用这种格式｡
所以我可以说r e dot然后在这里用search｡
如你所见, 我们给予它一个模式, 一个字符串和一些标志｡
我们稍后再谈这个｡
所以我们只需要说你想做什么样的图案？
我想搜索一下这个是否存在于字符串中, 这样我就可以说了｡
然后给予它实际的字符串｡
在我们的情况下｡
这是我们的绳子
所以如果我运行这个｡
好吧, 让我们把这里发生的事打印出来｡
那么让我们来看看打印｡
如果我单击“运行”｡
好吧, 我会的
我得到了一个匹配对象｡
正则表达式给我们一个输出, 不仅仅是true或false, 而是一个实际的对象, 它告诉我们关于这个的更多信息｡
你可以在这里看到, 其中一个信息是跨度｡
因此, 它在字符串中出现的位置, 是在索引17处出现, 并在索引21处结束｡
这真的很有用｡
让我们存储这些信息, 然后在这里输入a｡
那么我们可以用这个匹配对象做什么呢？
我们能做的第一件事是检查我们有什么｡
首先, 我们有span, 我们看到了｡
如果我运行这个｡
它告诉我字符串作为元组出现在哪里｡
所以指数17到指数21｡
我也可以做启动和启动｡
Well告诉我文本什么时候开始, 我也可以做group或者实际上我也可以做end来告诉我它在哪里结束｡
然后我还可以执行group, 然后group返回字符串中有匹配项的部分, 假设这里还有一个this, 如果我点击run,
你看到了吗？
它只给了我匹配的那一段或一部分字符串｡
当我们尝试进行多个搜索时, group非常有用｡
因此, 在我们的例子中, 我们只执行一次搜索｡
所以我们有一个模式, 我们试图匹配, 但有一些方法, 我们可以做多个搜索在一行｡
但在我给你们看之前, 如果我们做一个不存在的事情会发生什么, 比如这个大写的S？
如果我单击“运行”｡
我得到了一个错误, 因为现在A将是none因为如果正则表达式没有找到任何东西, 它将返回none.
所以它要么返回一个匹配对象, 要么不返回.
现在, 我们如何才能使它更先进？
我们可以做的一件事就是创建一个我们想要检查的模式｡
比如说这里的模式, 我们要用正则表达式点编译｡
这个编译器允许我们给予出一个模式, 就像我们在这里做的那样｡
比如说, 我只想检查一下｡
现在, 我可以用这个模式来代替我们的搜索｡
我现在就可以用这个模式了｡
去帮我找人｡
所以, 再一次, 如果我运行这个｡
好了, 现在我不用通过这个了｡
我只需要把我们要搜索的字符串传递给它｡
看到这是被捕获的, 我现在可以在任何地方多次使用模式｡
假设我能画出图案点｡
实际上, 我们拥有的所有方法都相当多｡
让我给你看一些有用的｡
我们找到了一切, 就找到了一切｡
匹配的实例｡
所以让我们假设在这里｡
然后单击“运行”｡
你看那个｡
我有这个｡
还有这个
所以我在一个列表中得到了这两个实例｡
我也可以做一些像完全匹配和完全匹配｡
好吧, 确保一切都完全匹配｡
如果我在这里单击“运行”, 我们就可以打印了, 请看这里, 单击“运行”｡
我一个都没有因为我没有得到完全匹配｡
为了使完全匹配返回匹配结果｡
它必须是我们要搜索的字符串｡
如果我单击“运行”｡
你去那里｡
我现在得到了一个匹配对象｡
现在, 假设单击“Run（运行）”时, 此处显示的是问号而不是感叹号｡
如果我有感叹号, 那就没有了, 也许后面还有别的东西｡
我还是没有｡
我们还有另一个选择, 那就是匹配｡
和match, 正如你所看到的, 匹配字符串开头的零个或多个字符｡
如果我在这里输入字符串, 然后输出dx, 让我把它改一下.
让我们在字符串中比较Andre, 如果我点击运行.
我仍然会得到一个匹配对象, 而如果我看到哪个对象使用完全匹配｡
这就没有了, 因为我们只需要一个精确的匹配, 而不是一个匹配字符串的匹配, 然后就不关心后面的结果了.
所以这是非常有用的｡
但到目前为止, 我的意思是, 我们得到了一些方法, 我们可以使用, 这是非常有用的,
但这似乎并不那么强大｡
为什么所有语言都有正则表达式？
为什么我们真的关心？
在下一个视频中, 我们将探讨模式的概念, 以及我们如何制作一些非常高级的模式｡
下一个视频里见｡
再见, 再见, 再见