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

yizhihongxing

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/sympy求解矩阵方程的方法

    下面是python/sympy求解矩阵方程的方法的完整攻略。 如何使用sympy解决和表示矩阵问题 sympy介绍 sympy是一个Python模块,用于计算符号性数学。它可以做代数运算,微积分,解析几何和更多的数学方面的任务,可以用来解决各种数学问题。 安装sympy库 安装sympy的方法有多种,最简单的方法是使用pip安装。 在终端输入以下命令,即可安…

    python 2023年6月5日
    00
  • python将秒数转化为时间格式的实例

    这里将为你提供“python将秒数转化为时间格式的实例”的完整攻略。 步骤一:导入模块 在进行时间格式转化前,需要先导入相关的模块来帮助实现将秒数转化为时间格式。 import datetime 步骤二:获取时间并进行处理 在获取的转化前,需要先获取当前时间,并进行处理。 time = datetime.datetime.now() time_second …

    python 2023年6月3日
    00
  • python 关键字与标识符超详细整理

    Python关键字与标识符 什么是关键字和标识符? 在编程语言中,关键字(Keyword)和标识符(Identifier)是相当重要的概念。简单来说,它们分别指代了在编程中用到的保留字和自定义的变量、函数、类等命名。 关键字是预定义的,Python中一共有35个关键字(可能会在以后的版本中有所变化)。这些关键字拥有特殊的含义,不能用来定义变量等命名。以下是P…

    python 2023年5月14日
    00
  • python函数实例万花筒实现过程

    下面我将详细讲解 “Python函数实例万花筒” 的实现过程。 什么是 “Python函数实例万花筒” “Python函数实例万花筒” 是一种通过函数实现不同效果的代码组合。该技巧可以更好地组织代码,并避免相似功能代码的重复编写。通过改变函数的参数、输入、输出等,可以让该技巧适用于更多的应用场景。 实现步骤 步骤 1:定义函数 首先需要定义不同的函数,这些函…

    python 2023年5月19日
    00
  • Puppeteer使用示例详解

    Puppeteer使用示例详解 Puppeteer是一个Node.js库,它提供了一个高级API来通过DevTools协议控制Chrome或Chromium浏览器。本文将详细讲解Puppeteer的使用示例,包括如何启动浏览器、如何打开网页、如何模拟用户操作等内容。 启动浏览器 以下是一个使用Puppeteer启动浏览器的示例: const puppetee…

    python 2023年5月15日
    00
  • python的random模块及加权随机算法的python实现方法

    python的random模块及加权随机算法的python实现方法 random模块简介 Python的random模块提供了生成随机数的功能,可以用来生成伪随机数。主要用于生成测试数据,大型模拟以及保护算法的机密性。 在Python中,可以通过导入random模块来使用这些功能。 以下是常用的方法: random.randint(a,b):生成[a,b]之…

    python 2023年5月14日
    00
  • Python正则表达式匹配和提取IP地址

    Python正则表达式匹配和提取IP地址 在Python中,我们可以使用正则表达式进行字符串匹配和提取。IP地址是一种常见的字符串格式,我们可以使用正则表达式来匹配提取IP地址。本攻略将详细讲解如何使用Python正则表达式匹配和提取IP地址,包括如何使用正则达式匹配IP地址、如何使用re模块提取IP地址。 使用正则表达式匹配IP地址 在Python中,我们…

    python 2023年5月14日
    00
  • pip报错“TypeError: ‘NoneType’ object is not iterable”怎么处理?

    当使用 pip 安装 Python 包时,可能会遇到 “TypeError: ‘NoneType’ object is not iterable” 错误。这个错误通常是由于 Python 返回了 None 类型的对象,而您尝试对其进行迭代操作导致的。以下是详细讲解 pip 报错 “TypeError: ‘NoneType’ object is not ite…

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