首页 > 编程语言 >请以零基础学Python 之 第二十讲 分组和贪婪匹配

请以零基础学Python 之 第二十讲 分组和贪婪匹配

时间:2024-07-31 21:58:03浏览次数:16  
标签:匹配 Python 正则表达式 分组 贪婪 字符串 第二十 match

当我们处理字符串时,有时候需要根据特定的模式来分割或者提取信息。Python 提供了强大的正则表达式库 re,可以帮助我们实现这些复杂的字符串操作。本篇博客将介绍两个常用的正则表达式技巧:分组和贪婪匹配。

分组(Grouping)

在正则表达式中,分组是将多个模式单元组合为一个单元,以便对其进行操作。分组通过圆括号 () 实现,它可以帮助我们实现以下几种功能:

  1. 提取子模式: 可以将匹配的字符串中的一部分单独提取出来。
  2. 应用操作符: 可以在分组上应用操作符,如*+? 等,以控制匹配的重复次数。
示例

假设我们有一个字符串,包含日期和时间信息,格式如下:2023-07-31 08:30。我们想要分别提取出日期和时间部分。

import re

text = '2023-07-31 08:30'

pattern = r'(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2})'

match = re.match(pattern, text)

if match:
    print(f'Date: {match.group(1)}')
    print(f'Time: {match.group(2)}')
else:
    print('No match')

在这个例子中,正则表达式 (\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}) 中的两个分组分别提取了日期和时间。match.group(1) 返回日期部分,match.group(2) 返回时间部分。

贪婪匹配(Greedy Matching)

正则表达式默认是贪婪匹配的,意味着它会尽可能匹配最长的字符串。这在某些情况下可能不是我们想要的行为。为了避免贪婪匹配,我们可以使用 ? 操作符来指示正则引擎使用非贪婪模式。

示例

假设我们有一个包含 HTML 标签的字符串,如 <div><p>Hello</p></div>,我们想要匹配其中的第一个 div 标签内容。

import re

html = '<div><p>Hello</p></div>'

pattern = r'<div>(.*?)</div>'

match = re.search(pattern, html)

if match:
    print(f'Content inside <div>: {match.group(1)}')
else:
    print('No match')

在这个例子中,正则表达式 <div>(.*?)</div> 中的 .*? 是一个非贪婪模式,用来匹配最短的可能内容(即第一个 <div> 和最近的 </div> 之间的内容),而不是默认的贪婪模式匹配整个字符串。

结论

通过使用分组和非贪婪匹配,我们可以更灵活地处理复杂的字符串操作。正则表达式作为强大的工具,可以帮助我们从文本中提取所需信息,进行数据处理和分析。在学习和应用正则表达式时,理解这些概念是非常重要的,它们能够大大提高我们处理文本数据的效率和准确性。希望本文能帮助零基础学习者更好地掌握 Python 中的正则表达式技巧。

标签:匹配,Python,正则表达式,分组,贪婪,字符串,第二十,match
From: https://blog.csdn.net/m0_73697499/article/details/140833464

相关文章

  • 零基础学python 之 第十九讲 正则表达式
    当你开始学习Python编程时,正则表达式是一项非常强大的工具,用于处理文本数据中的模式匹配和搜索。本篇博客将带你从零开始学习如何在Python中使用正则表达式。1.什么是正则表达式?正则表达式(RegularExpression)是用于描述字符串模式的一种工具,可以用来匹配、查找、替换符合特......
  • python之贪吃蛇
    废话不多说,直接上代码(确保已经安装pygame)importpygameimportrandom#基础设置#屏幕高度SCREEN_HEIGHT=480#屏幕宽度SCREEN_WIDTH=600#小方格大小GRID_SIZE=20#颜色设置WHITE=(255,255,255)BLACK=(0,0,0)GREEN=(0,255,0)#初始化Pyg......
  • Python - Context Managers
    withstatementHereisthesyntaxofthewithstatement:withexpressionasvar:statementsTheexpressionshouldbeacontextmanagerobject,oritshouldproduceacontextmanagerobject.Whenthiswithstatementisexecuted,thefirstthingthat......
  • python装饰器
    一前言环境:win10python3.10二函数中的函数如果定义了一个函数A,现在想在不影响函数A原先功能的情况下,新增加一些额外的功能,怎么办,下面是一个例子如上,本来原先执行test_except那句话只会打印over那句话,但现在执行test_except却会输出一些另外的东西这其中有个巧妙地东西就......
  • Python - Built-in Exceptions: Python Exceptions Class Hierarchy
     Figure20.4:Built-inexceptionsTheclassBaseExceptionisthebaseclassofallthebuilt-inexceptionclasses.FromBaseException,fourclassesnamedException,SystemExit,KeyboardInterruptandGeneratorExitarederived.Alltheremainingbuilt-in......
  • Python - Strategies to handle exceptions in your code
    Therearetwoapproachesthatcanbefollowedwhenwewanttodealwithexceptionsthatoccurduetounusualevents:LBYL-LookBeforeYouLeapEAFP-EasiertoAskforForgivenessthanPermissionIntheLBYLapproach,weavoidexceptions,whileinthe......
  • 全网最适合入门的面向对象编程教程:29 类和对象的Python实现-断言与防御性编程和help函
    全网最适合入门的面向对象编程教程:29类和对象的Python实现-断言与防御性编程和help函数的使用摘要:在Python中,断言是一种常用的调试工具,它允许程序员编写一条检查某个条件。本文主要介绍了断言的应用场景和特点以及assert语句的使用,同时介绍了防御性编程和help()函数......
  • Python入门知识点 10--闭包与装饰器
    一、直接与间接程序开发潜规则生活中:   有台电脑,他的硬盘空间不够了,里面的资料我不能动,也不能删,咋办   1.加装硬盘--直接解决--前提是我的电脑能加装   2.插个u盘--间接解决-->没有特别的要求,比较灵活   开发潜规则:   代码拓展-->开放-->可......
  • python log运算如何写
    Python中用于计算对数的log()方法,是Python入门基础中的必会的方法,需要的朋友可以参考下。log()方法返回x的自然对数,x>0。语法以下是log()方法的语法:import math math.log( x )注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math的静态对象来调用......
  • Python - operator module
    >>>list(map(lambdax,y:x*y,[1,2,3,4],[5,6,7,8]))[5,12,21,32]Herewehavecalledthemapfunctionandsentalambdaexpressionasfirstargument.Insteadofthelambdafunction,youcansendoperator.mul.>>>list(map(operator......