当前位置: 首页 > 网络应用技术

[2022] Cui Qingcai Python3切割教程 - 功率且灵活的正则表达式

时间:2023-03-06 17:53:32 网络应用技术

  ?这是爬行动物列的原始“ 15”

  在上一节中,我们可以使用请求来获取网页的源代码并获取HTML代码。但是我们真正想要的数据包含在HTML代码中。我们如何从HTML代码中获取所需的信息?正则表达式是有效的方法之一。

  在本节中,让我们看一下正则表达式的相关用法。正则表达式是处理字符串的强大工具。它具有自己的特定语法结构。有了它,实现搜索,更换和匹配字符串验证并不是问题。

  当然,对于爬行者来说,从HTML中提取所需信息非常方便。

  说了很多话,也许我们对此感到模糊。让我们以一些示例来查看正则表达式的用法。

  打开由开源中国提供的正则表达测试工具http://tool.oschina.net/regex/,输入要匹配的文本,然后选择常用的正则表达式以获取相应的匹配结果。例如,输入在这里要匹配的文本如下:

  该字符串包含电话号码,电子邮件和一个URL。接下来,尝试用正则表达式提取它,如图所示。

  在网页的右侧选择“匹配的电子邮件地址”,您可以在下面的文本中看到电子邮件。

  如果选择“ URL URL”,则可以在下面的文本中看到URL。

  在网页的右侧选择“匹配的电子邮件地址”,您可以在下面的文本中看到电子邮件。如果选择“ URL URL”,则可以在下面的文本中看到URL。它非常神奇?

  实际上,这里是正则表达式的匹配,即提取具有某些规则的特定文本。例如,电子邮件的开头是字符串,然后是符号,最后是一个具有特定格式的域名。另外,对于URL,开始是协议类型,然后是结肠加上双倾斜线,最后是域名加路。

  对于URL,您可以使用以下正则表达式匹配:

  使用此正则表达式匹配字符串。如果此字符串包含一个类似URL的文本,则将提取它。

  实际上,这种正则表达式看起来像是一团糟,否则,有特定的语法规则。例如,它代表一个小写字母,与任意差距中的任何差距匹配,这意味着先前字符中有很多字符。一系列的正则表达方式是许多匹配规则的组合。

  编写正则表达式后,您可以将其带到一个长字符串以匹配并找到它。不管这个字符串是什么,只要我们符合我们编写的规则,就可以找到所有字符串。对于网页,如果您想要要查找Web源代码中有多少个URL,请使用URL的正则表达式匹配。

  我们已经说过上面的一些匹配规则,表2-列表常用的匹配规则。

  表2共同匹配规则

  匹配的字母,数字和从属行匹配不是匹配备用空白字符的字母,数字和子行线,这些线路等同于匹配任何非空字符匹配的数字。如果有线路更改,则仅匹配运行字符串末端的字符串末端的末端。如果行更改,它还将匹配最终匹配位置,该位置匹配与表格匹配的行符号匹配以匹配行字符串匹配的开始。线字符串的最终匹配是任意字符。除了更改行之外,当指定标记时,它还可以与任何包含一组连续交换的字符匹配,以分别表示一组字符和列表,例如在字符中或不匹配的字符,例如匹配匹配,例如作为匹配的添加和外界的字符匹配0或更多表达式匹配1或更多表达式匹配0或1个正则表达式定义。贪婪的方法与A或B中的表达式匹配以匹配括号中的表达式。这也意味着在阅读了一个小组后,它可能有点头晕,但是不用担心,我们将稍后详细解释。

  实际上,正则表达式不是Python所独有的,也可以在其他编程语言中使用。Python的RE库提供了整个正则表达式的实现。使用此库,您可以在Python中使用正则表达式。在Python中,正则表达式用于使用此库以及一些常见的理解方法。

  这是第一个常用的匹配方法,并且要匹配的字符串和正则表达式可以检测到此正则表达式是否匹配字符串。

  该方法将尝试从字符串的起始位置匹配正则表达式。如果匹配,它将返回成功的结果;如果不匹配,请返回它。示例如下:

  运行结果如下:

  首先在此处声明一个字符串,其中包括英语字母,空白字符,数字等。接下来,我们写一个正则表达式:

  使用它匹配这个长字符串。开始是匹配字符串的开始,即开始。然后将空白字符匹配以匹配目标字符串的空间;匹配数字,3个匹配;然后编写一个匹配空间;稍后,我们实际上可以,我们实际上可以匹配4,但是它更麻烦,因此您可以将前面的规则与代表匹配4次,即匹配4个数字;接下来是1个空白字符,最后的匹配10个字母和下一行线路。内容我们注意到此处的目标字符串在这里不匹配,但仍然可以匹配,但是匹配的结果很短。

  在该方法中,第一个参数传递到正则表达式中,第二个参数传递到要匹配的字符串中。

  打印输出的结果可以看出结果是对象,证明它已成功匹配。该对象有两种方法:该方法可以输出内容匹配的内容。结果,这正是正则表达规则的内容;该方法可以输出匹配范围。结果,这是原始字符中原始字符中的匹配结果字符串,字符串中的位置范围。

  通过上面的示例,我们基本上了解了如何在Python中使用正则表达式来匹配段落。

  如果我们使用该方法获取匹配的字符串内容,该怎么办,但是如果您想从字符串中提取内容的一部分,我该怎么办?文本。

  在这里,您可以使用括号来包括要提取的子线。标记的每个子表达依次对应于每个组。该示例如下:

  在这里,我们要提取字符串。目前,可以包括数字部分的正则表达式,然后调用匹配结果。

  运行结果如下:

  可以看出,我们已经成功了。这里使用的是,它与之不同,后者将输出完整的匹配结果,前者将输出第一个包围的匹配结果。如果正则表达式背后包含内容,则您可以按顺序使用并等待。

  我们刚才写的正则表达实际上更为复杂。我们以空白字符编写匹配。我们匹配数量的数量。这个工作负载非常大。在它们的面前是无限的时间,因此它们可以匹配任何角色。

  然后,上面的示例,我们可以重写正则表达式:

  在这里,我们直接省略了中间部分,全部用于替换,最后添加一个端字符串。运行结果如下:

  可以看出,该方法输出所有匹配的字符串,这意味着我们编写的正则表达式匹配目标字符串的所有内容。方法输出是整个字符串的长度。

  因此,我们可以使用简化的正则表达式写作。

  使用上面的共同匹配时,有时可能不是我们想要的结果。查看以下示例:

  在这里,我们仍然想获得中间的数字,因此中间仍然写的是。因为内容在数字的两边都很混乱,他们想忽略写作和写作。最后,似乎没有Quarder.LET查看操作的结果:

  发生了奇怪的事情,我们只有7个数字。到底是怎么回事?

  这是贪婪的匹配和非婚姻匹配的问题。在贪婪的匹配下,它将匹配尽可能多的字符。正则表达式中的后者至少为一个数字,并且没有指定数量的数字。因此,它是尽可能匹配的。在这里,您将匹配它,留下可以满足条件7的数字7,最后获得它。内容的内容仅为数字7。

  但这显然给我们带来了很多不便。有时匹配的结果将是无法解释的。实际上,您只需要在这里使用非纠正匹配。不耐心匹配是一个,所以它可以实现什么效果?让我们采取什么效果?查看示例:

  在这里,我们只是将第一个将第一个更改为非婚姻匹配项。结果如下:

  您目前可以成功获取它。可以想象贪婪的匹配是尽可能多的角色,而非婚姻匹配是尽可能多地匹配字符。当匹配背部的空白字符时在后面是数字,可以匹配,然后在此处不匹配,然后将其交给匹配数字。因此,这与角色尽可能少,结果就是结果。

  因此,在匹配时,尝试在字符串中间使用非磨难匹配,即替换它,以免在缺少匹配结果时发生。

  但是,应该注意的是,如果匹配结果在字符串上结束,则可能不匹配任何内容,因为它会匹配尽可能小的字符。例如:

  运行结果如下:

  可以观察到没有匹配的结果,但是与尽可能多的内容匹配的内容并成功获得了匹配结果。

  正则表达式可以包含一些可选的徽标修饰符来控制匹配模式。修饰符被指定为可选符号。LET请查看该示例:

  与上面的示例类似,我们在字符串中添加了一个更改符号。正则表达式仍然相同,用于匹配数字。查看结果:

  直接运行以报告错误,也就是说,正则表达式不匹配此字符串,返回结果是,我们称之为方法并导致它。

  那么,为什么不能匹配行更改?这是因为。匹配是除了更改行以外的任何字符。当它遇到更改符号时,它无法匹配,因此匹配失败。您只需要在此处添加修改器即可纠正此错误:

  该修饰符的作用是制作。匹配包括所有字符,包括行符号。此时的运行结果如下:

  这通常在网页匹配中使用。由于HTML节点通常会更改行,而且您可以匹配节点和节点之间的更改。

  此外,如表2所示,在必要情况下可以使用一些修饰符。

  表2模型和描述

  使情况与情况进行匹配配对,并进行多行匹配,影响力和特使。所有包含更改符号的字符均基于Unicode字符集。此标志的影响以及通过给您的徽标的影响和此徽标更灵活的格式,以便您可以在网页匹配中更轻松地编写正则表达式,更常用。

  我们知道正则表达式定义了许多匹配模式,例如除了更改字符以外的任何字符,但是如果包括目标字符串,我该怎么办?

  在这里,您需要使用公义匹配。示例如下:

  在遇到常规匹配模式的特殊字符时,请在正面添加反斜坡。例如,它可用于匹配,并且运行结果如下:

  可以看出,它与原始字符串成功匹配。

  这些是正则表达式中常用的几个知识点,对掌握它们非常有帮助。

  如前所述,该方法从字符串的开头匹配。一旦开始不匹配,整个比赛都会失败。

  这里的字符串从开始开始,但是正则表达式开始。整个正则表达式是字符串的一部分,但匹配失败。运行结果如下:

  由于需要在使用时考虑该方法,因此不方便地匹配。它更适合检测符合正则表达式的规则。

  这里还有另一种方法。匹配时它将扫描整个字符串,然后返回第一个成功的匹配。换句话说,正则表达式可以成为字符串的一部分。匹配时,该方法将依次扫描字符串,直到符合规则的第一个字符串,然后返回到匹配内容。如果找不到搜索,请返回返回,然后将其返回到返回。

  我们在上述代码中修改方法以查看操作的结果:

  目前,获得了匹配结果。

  因此,为了匹配便利性,我们可以尽可能多地使用它。

  让我们看一下使用情况。

  首先,这里有一个HTML文本。接下来,写一些正则表达式以实现相应信息的提取:

  可以观察到节点中有许多节点,包括一些节点,有些不包括节点,以及一些相应的属性 - hyperlinks和singer名称。

  首先,我们尝试了节点内的超链接中包含的歌手名称和歌曲名称。目前,我们需要在第三个节点下提取节点的属性和文本。

  目前,正则表达式可以从开始开始,然后找到徽标,中间部分可用于匹配。next,您需要提取此属性值,因此您需要编写它。您需要在此处提取的零件包含在小括号中,以便用一种方法提取它。两侧之间的边框是双引号。然后,您需要匹配节点的文本,左边界所在,右边界是。然后目标内容仍用于匹配,因此最终的正则表达式变为:

  然后调用该方法,它搜索整个HTML文本以查找符合正则表达式的第一个内容。

  此外,由于代码已更改,因此需要介绍此处的第三个参数。整个匹配代码如下:

  由于需要获得的歌手和歌曲名称被小括号包围,因此可以通过方法获得。

  运行结果如下:

  可以看出,这是节点内的超链接中包含的歌手名称和歌曲标题。

  如果未添加正则表达式(也就是说,没有带来的节点的内容),将会发生什么?我们删除正则表达式,并且代码被重写如下:

  由于该方法返回了第一个合格的匹配目标,因此结果将在此处发生变化:

  删除标签后,在字符串的开头搜索。目前,合格的节点成为第二个节点,后者将不再匹配,因此运行结果成为第二个节点的内容。

  请注意,在上面的两个匹配中,添加了该方法的第三个参数,这使得可以匹配行,因此包含行更改的节点匹配。如果我们删除它,它将是什么?代码显示?如下:

  运行结果如下:

  可以看出,结果成为第四节点的内容。这是因为第二和第三个节点都包括更改的符号。被删除后,它们无法再匹配交换符号,因此正则表达式将与第二和第三个节点不匹配,并且第四个节点不包括线路的更改,因此成功匹配。

  由于大多数HTML文本都包含不断变化的符号,因此您需要尽可能多地添加修饰符,以避免无法匹配的问题。

  早些时候,我们介绍了使用情况。它可以返回匹配的正则表达式的第一个内容,但是如果您想获取正则表达式的所有内容,我该怎么办?目前有必要使用该方法。此方法搜索整个字符串,然后返回匹配正则表达式的所有内容。

  它仍然是上面的HTML文本。如果要获得所有节点,歌手和歌曲标题,则可以用方法替换该方法。如果有返回结果,则是列表类型,因此您需要依次遍历每个组。代码显示为以下:

  运行结果如下:

  可以看出,返回列表中的每个元素都是元组类型,我们可以用相应的索引将其取出。

  如果仅获得第一个内容,则可以使用该方法。需要提取多个内容时,可以使用方法。

  除了使用正则表达式提取信息外,有时还必须使用它来修改文本。例如,如果要删除文本字符串中的所有数字,则仅使用字符串方法,也是如此笨重。目前,您可以使用该方法。该示例如下:

  运行结果如下:

  在这里,您只需要传递第一个参数即可匹配所有数字。第二个参数是替换字符串(如果删除了参数,可以分配给空),则第三个参数为原始字符串。

  在上面的HTML文本中,如果您想获得所有节点的歌曲标题,则直接用正则表达式提取可能很麻烦。例如,它可以像这样写:

  运行结果如下:

  目前,使用该方法相对简单。您可以使用该方法先删除节点,仅保留文本,然后使用提取:

  运行结果如下:

  可以看出,在处理节点后,它消失了,然后可以通过方法直接提取该方法。可以看出,在适当的时候,使用该方法的方法可以更有效。

  前面提到的方法是处理字符串的方法。最后,引入了该方法。此方法可以将常规字符串编译为正则表达式对象,以在后续匹配中重复使用它。示例代码如下:

  例如,这里有3个日期,我们希望分别删除3个日期的时间。目前,我们可以使用方法。该方法的第一个参数是正则表达式,但是这里无需在此处重复三个相同的正则表达式。目前,您可以使用该方法将正则表达式编译到正则表达式对象中以进行重复使用。

  运行结果如下:

  此外,您还可以通过修饰符(例如等待修饰符我们可以更好地重复使用。

  到目前为止,引入了正则表达式的基本用法,然后通过特定示例解释了正则表达式的使用。

  本节代码:https://github.com/python3webspider/regextest。

  非常感谢您的阅读。有关更多令人兴奋的内容,请注意我的公共帐户“编码器”和“ Cui Qingcai丨Quiet”。

  原始:https://juejin.cn/post/709567600032690988