python基础之贪婪模式与非贪婪模式

Python基础之贪婪模式与非贪婪模式

在正则表达式中,常用到的匹配模式是贪婪模式和非贪婪模式。这两种模式的区别在于匹配子串时的“贪心程度”。

贪婪模式

在贪婪模式下,匹配子串时,匹配器会尽可能地匹配更多的字符。具体来说,当你使用“+”、“*”、“?”这样的通配符时,匹配器会尽量多地匹配字符。

举例来说,正则表达式a.+b与字符串a123b456b789的匹配结果是a123b456b,而不是a123b,因为匹配器尽可能地匹配多个字符。

非贪婪模式

在非贪婪模式下,匹配子串时,匹配器会尽可能少地匹配字符。具体来说,当你在通配符“+”、“*”、“?”后面加上“?”时,匹配器会尽量少地匹配字符。

举例来说,正则表达式a.+?b与字符串a123b456b789的匹配结果是a123b,因为匹配器尽可能少地匹配字符。

贪婪模式和非贪婪模式的应用

示例一:匹配HTML标签中的文本

在HTML页面中,经常需要从标签中提取出文本内容。比如,对于以下HTML代码:

<div class="article">
    <h1>Python基础之贪婪模式与非贪婪模式</h1>
    <p>在正则表达式中,常用到的匹配模式是贪婪模式和非贪婪模式。</p>
</div>

如果想要提取出<h1>标签和<p>标签中的文本,可以使用如下正则表达式:

import re

html = '''<div class="article">
            <h1>Python基础之贪婪模式与非贪婪模式</h1>
            <p>在正则表达式中,常用到的匹配模式是贪婪模式和非贪婪模式。</p>
          </div>'''

pattern = r'<.+?>(.+?)</.+?>'

result = re.findall(pattern, html, re.DOTALL)

print(result) # ['Python基础之贪婪模式与非贪婪模式', '在正则表达式中,常用到的匹配模式是贪婪模式和非贪婪模式。']

运行结果:

['Python基础之贪婪模式与非贪婪模式', '在正则表达式中,常用到的匹配模式是贪婪模式和非贪婪模式。']

在这个示例中,使用了非贪婪模式,通过<.+?>匹配HTML标签,通过(.+?)匹配标签中的文本内容。

示例二:匹配字符串中的数字

有时候需要从字符串中提取出数字,这时就可以使用贪婪模式,尽可能地匹配更多的数字字符。

比如,对于字符串abc123def456ghi789,如果想要提取出其中的数字,可以使用如下正则表达式:

import re

text = 'abc123def456ghi789'

pattern = r'\d+'

result = re.findall(pattern, text)

print(result) # ['123', '456', '789']

运行结果:

['123', '456', '789']

在这个示例中,使用了贪婪模式,通过\d+匹配字符串中的数字。由于没有加上非贪婪模式的“?”修饰,因此匹配器会尽量多地匹配数字字符。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python基础之贪婪模式与非贪婪模式 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python 基本数据类型占用内存空间大小的实例

    让我来给你讲解一下“Python 基本数据类型占用内存空间大小的实例”的完整攻略。 标准数据类型的内存占用 在 Python 中,标准数据类型包括整型(int)、浮点型(float)、复数型(complex)、字符串(str)、布尔型(bool)、列表(list)、元组(tuple)、字典(dict)、集合(set)等。这些数据类型占用的内存空间大小不同,下…

    python 2023年6月3日
    00
  • python实现线性回归的示例代码

    当我们需要对某个数据集进行分类或者回归时,线性回归是一个常用的机器学习方法。在Python中,我们可以使用scikit-learn库实现线性回归。接下来,将从以下几方面介绍Python实现线性回归的攻略: 数据准备 将数据拆分为训练集和测试集 使用线性回归模型拟合数据 使用测试集评估模型表现 示例代码 1. 数据准备 在使用线性回归进行机器学习之前,我们首先…

    python 2023年5月19日
    00
  • Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)

    Windows下的Python3.6.1的下载与安装图文详解(适合32位和64位) 下载Python3.6.1安装包 首先,从Python官网下载Windows安装包。在页面http://www.python.org/downloads/windows/可以找到可供下载的Python版本。在该页面,可以看到所有的Python版本以及相应的安装包。 选择需要的…

    python 2023年5月13日
    00
  • python实现的简单文本类游戏实例

    以下是“python实现的简单文本类游戏实例”的完整攻略: 实现思路 这个文本类游戏需要基于控制台来进行交互,打印出当前游戏场景和提供的选项。玩家输入选项后,程序通过判断和条件分支的方式做出相应的反应,更新游戏场景和提供新的选项。实现这个游戏需要用到 Python 的控制台输入输出、条件分支、循环和数据结构等知识。 游戏流程分析 这个游戏的流程大致如下: 玩…

    python 2023年5月19日
    00
  • 我用Python给班主任写了一个自动阅卷脚本(附源码)

    我用Python给班主任写了一个自动阅卷脚本(附源码) 背景 在学校中,老师经常需要阅卷,这是一个重复的枯燥无味的工作,同时也容易出错。为了解放老师的时间,提高学生作业批改效率,我使用Python编写了一个自动阅卷脚本。 思路 脚本的基本思路如下: 读取作业答案; 读取学生作业; 对每一份学生作业进行自动批改; 计算总分和各类题目的得分; 将批改结果保存到文…

    python 2023年5月19日
    00
  • python 信息同时输出到控制台与文件的实例讲解

    让我来详细讲解如何将 Python 信息同时输出到控制台与文件的实例讲解。 1. 将 Python 信息输出到控制台和文件 在 Python 中,我们可以使用 print() 函数将信息输出到控制台。但是,有时候我们需要将信息保存到文件中。那么,如何同时将信息输出到控制台和文件呢?下面我们看看如何实现。 首先,我们需要打开一个文件并写入内容。可以使用 ope…

    python 2023年6月3日
    00
  • 使用Pandas修改DataFrame中某一列的值

    以下是“使用Pandas修改DataFrame中某一列的值”的完整攻略: 一、问题描述 在Pandas中,DataFrame是一种二维表格数据结构,其中每一列可以是不同的数据类型。本文将详细讲解如何使用Pandas修改DataFrame中某一列的值。 二、解决方案 2.1 修改DataFrame中某一列的值 在Pandas中,我们可以使用df[‘column…

    python 2023年5月14日
    00
  • Python文件操作方法详解

    以下是关于“Python文件操作方法详解”的完整攻略: 文件操作方法详解 Python中的文件操作是指对文件进行读取、写入、修改等操作。Python提供了丰富的文件操作方法,可以方便地对文件进行操作。以下是Python文件操作的详细说明: 开文件 在Python中,可以使用open()函数打开文件。open()函数的语法如下: open(file, mode…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部