Python正则表达式教程之二:捕获篇

Python正则表达式教程之二:捕获篇

在Python正则表达式教程之一中,我们介绍了正则表达式的基本语法和常用函数。在本攻略中,我们将深入探讨则表达式的捕获功能,包括如何使用捕获组、非捕获组、零宽断言等功能。

捕获组

捕获组是正则表达式中的一种特殊语法,用于将匹配到的子字符串作为一个整体进行捕获。在正则表达式中,捕获组使用圆括()表示。下面是一个例子,演示如使用捕获组提取字符串中的日期:

import re

text = 'Today is 2023-05-14, tomorrow is 2023-05-15.'
pattern = r'(\d{4})-(\d{2})-(\d{2})'
 = re.findall(pattern, text)
if result:
    print('Matches found:', result)
    for match in result:
        print('Year:', match[0])
        print('Month:', match[1])
        print('Day:', match[2])
else:
    print('Matches not found')

在上面的代码中,我们使用正则表达式(\d{4})-(\d{2})-(\d{2})提取中的日期。\d{4}表示匹配一个四位数字,\d{2}表示匹配一个两位数字。()表示将\d{4}\d{2}\d{2}匹配到的字符串作为捕获组。findall()函数可以返回所有匹配的结果。运行代码后,输出结果为Matches found: [('2023', '05', '14'), ('2023', '05', '15')]和每个日期的具体内容。

非捕获组

非捕获组是正则表达式中的一种特殊语法,用于将匹配到的子字符串作为一个整体进行匹配,但不将其作为捕获组。在正则表达式中,非捕获组使用(?:)表示。下面是一个例子,演示如何使用非捕获组匹配URL中的协议:

import re

text = 'https://www.example.com'
pattern = r'(?:https?://)([^/]+)'
result = re.search(pattern, text)
if result:
    print('Match found:', result.group())
    print('Domain:', result.group(1))
else:
    print('Match not found')

在上面的代码中,我们使用正则表达式(?:https?://)([^/]+)匹配URL中的协议。https?://表示匹配http://https://[^/]+表示匹配一个或多个非斜杠字符。(?:)表示将https?://作为非捕获组,不将其作为捕获组。运行代码后,输出结果为Match found: https://www.example.comDomain: www.example.com

零宽断言

零宽断言是正则表达式中的一种特殊语法,用于在匹配字符串时,指定一个位置,该位置必须满足某种条件。在正则表达式中,零宽断言使用(?=)(?!)表示。下面是一个例子,演示如何使用零宽断言匹配字符串中的数字:

import re

text = '123456'
pattern = r'(?<=\d)(?=(\d{3})+$)'
result = re.sub(pattern, ',', text)
print(result)

在上面的代码中,我们使用正则表达式(?<=\d)(?=(\d{3})+$)匹配字符串中的数字。(?<=\d)表示匹配前面是一个数字的位置,(?=(\d{3})+$)表示匹配后面是一个或多个三位数字的位置。(?=)表示正向零宽断言,(?!)表示负向零宽断言。sub()函数用于在字符串中搜索正则表达式的所有匹配项,并将其替换为指定的字符串。运行代码后,输出结果为123,456

示例说明

示例1:提取HTML标签中的属性值

下面是一个例子,演示如何使用正则表达式提取HTML标签中的属性值:

import re

text = '<a href="https://www.example.com">Example</a>'
pattern = r'<a href="([^"]+)">([^<]+)</a>'
result = re.search(pattern, text)
if result:
    print('Match found:', result.group())
    print('URL:', result.group(1))
    print('Text:', result.group(2))
else:
    print('Match not found')

在上面的代码中,我们使用正则表达式<a href="([^"]+)">([^<]+)</a>提取HTML标签中的href属性值和文本内容。[^"]+表示匹配一个或多个非双引号字符,[^<]+表示匹配一个或多个非小于号字符。()表示将[^"]+[^<]+匹配到的字符串作为捕获组。运行代码后输出结果为Match found: <a href="httpswww.example.com">Example</a>URL: https://www.example.comText: Example

示例2:提取JSON字符串中的键值对

下面是另一个例子,演示如何使用正则表达式取JSON字符串中的键值对:

import re

text = '{"name": "John", "age": 30, "city": "New York"}'
pattern = r'"(\w+)":\s*"([^"]+)"'
result = re.findall(pattern, text)
if result:
    print('Matches found:', result)
    for key, value in result:
        print(key, ':', value)
else:
    print('Matches not found')

在上面的代码中,我们使用正则表达式"(\w+)":\s*"([^"]+)"提取JSON字符串中的键值对。\w+表示匹配一个或多个字母、数字、下划线,[^"]+表示匹配一个或多个非双引号字符。()表示将\w+[^"]+匹配到的字符串作捕获组。findall()函数可以返回所有匹配的结果。运行代码后,输出结果为Matches found: [('name', 'John'), ('age', '30'), ('city', 'New York')]`和每个键值对的具体内容。

总结

本攻略详细讲解了Python正则表达式中的捕获组、非捕获组、零宽断言等功能。捕获组可以将匹配到的子字符串作为一个整体捕获,非捕获组可以将匹配到的子字符串作为一个整体进行匹配,但不将其作为捕获组。零宽断言可以在匹配字符串时,指定一个位置,该位置必须满足某种条件。演示了如何使用捕获组提取字符串中的日期、使用非捕获组匹配URL中的协议、使用零宽断言匹配字符串中的数字。希望读者可以通过这些示例更好地理解正则表达式的应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python正则表达式教程之二:捕获篇 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python实现自动访问网页的例子

    下面是Python实现自动访问网页的攻略: 环境准备 安装Python3.x, 安装相关的第三方依赖库requests、beautifulsoup4等 实现流程 导入需要使用的库 import requests # 发送HTTP请求模块 from bs4 import BeautifulSoup # 解析HTML字符串模块 发送HTTP请求获取页面 url …

    python 2023年5月19日
    00
  • python 用正则表达式筛选文本信息的实例

    Python正则表达式筛选文本信息的实例 在Python中,正则表达式是一种强大的文本工具,可以用于字符串匹配、替换、分割等操作。本攻略将详细讲解如何使用Python正则表达式筛选文本信息,包括如何使用re模块进行正则表达式匹配、如何使用re.sub函数进行替换、如何使用re.split函数进行分割等操作。 re模块 在Python中,re模块是处理正则表达…

    python 2023年5月14日
    00
  • Python 简单数值递归

    首先需要理解“递归”的概念:递归是一种解决问题的方法,它把一个问题分解为越来越小的子问题,直到问题的规模小到可以被很简单直接求解的地步。复杂问题分解成的多个子问题,不断调用自身函数,最终将所有结果合并在一起得到最终答案,就是递归。 Python中我们可以使用函数自身的调用来实现递归。在进行数值递归时,常常需要传入一个参数作为递归过程中进行计算的变量来实现递归…

    python-answer 2023年3月25日
    00
  • Python urllib3软件包的使用说明

    这里是关于 Python urllib3 软件包的使用说明的完整攻略。 Python urllib3 软件包的使用说明 简介 Python urllib3 是一个HTTP客户端库,具有以下特性: 线程安全且无需全局锁定。 基于HTTP/1.1协议,支持长连接和连接池。 支持文件上传。 自动解码响应的gzip和deflate压缩。 完整支持unicode(内含…

    python 2023年6月3日
    00
  • Python操作CSV格式文件的方法大全

    下面是详细的讲解Python操作CSV格式文件的方法大全的完整实例教程: CSV是什么? CSV(Comma-Separated Values)即逗号分隔值,是一种常见的文件格式,用于存储数据。CSV文件以纯文本形式存储,每行为一条记录,每个字段之间以逗号分隔。 Python如何操作CSV文件? Python提供了许多内置的模块来操作CSV文件,其中最常用的…

    python 2023年5月13日
    00
  • win10环境下python3.5安装步骤图文教程

    下面是“win10环境下python3.5安装步骤图文教程”的完整攻略。 1. 下载Python3.5 首先访问Python官网(https://www.python.org/downloads/),找到Python3.5的版本下载链接,选择符合你Windows系统位数的版本。下载完成后,双击安装程序开始安装。 2. 安装Python3.5 在安装过程中,要…

    python 2023年5月14日
    00
  • python查找重复图片并删除(图片去重)

    Python查找重复图片并删除(图片去重) 1. 简介 在使用计算机存储图片的时候,往往会遇到大量的图片需要存储。但是很多时候,我们会发现有些图片是相同的,却被存储了多次。这样不仅浪费了硬盘的空间,而且也不方便图片查找和管理。因此,我们需要一种方式来对图片进行去重。 Python是强大的编程语言,它提供了各种各样的库,可以帮助我们实现各种功能,包括图片去重。…

    python 2023年5月18日
    00
  • 详解Linux中文乱码问题终极解决方法

    下面是详细的解析: 一、问题描述及分类 在Linux操作系统中经常会遇到中文乱码的情况,这是因为Linux操作系统默认使用UTF-8编码方式,而中文文本中可能会包含GB2312、BIG5等其他编码方式,因此在进行中文文本的输入、输出以及文件传输过程中,就会出现乱码的情况。 在Linux系统中的中文乱码问题,主要分为以下3种情况: 终端中文乱码:在终端中输入中…

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