iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python正则表达式教程之二:捕获篇
  • 684
分享到

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

之二教程正则表达式 2022-06-04 18:06:43 684人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

前言 在上一篇文中,我们介绍了关于python正则表达式的基础,那么在这一篇文章里,我们将总结一下正则表达式关于捕获的用法。下面话不多说,来看看详细的介绍吧。 捕获 捕获和分组在正则表达式中有着密切的

前言

在上一篇文中,我们介绍了关于python正则表达式的基础,那么在这一篇文章里,我们将总结一下正则表达式关于捕获的用法。下面话不多说,来看看详细的介绍吧。

捕获

捕获和分组在正则表达式中有着密切的联系,一般情况下,分组即捕获,都用小括号完成(因此,小括号在正则表达式中也属于特殊字符,表达原含义时需要转义):

(…) 正常分组,并捕获

(?:…) 分组,但是不捕获

举个例子,假设我们需要匹配一个座机号码:


>>> m = re.search(r'^(d{3,4}-)?(d{7,8})$','020-82228888')
>>> m.group(0)
'020-82228888'
>>> m.group(1)
'020-'
>>> m.group(2)
'82228888'

这里,默认分组(0)是完整的匹配,之后的分组则按出现顺序排列。

接下来,我们想在一整段文本中,找出所有的座机号码,这里需要用到re.findall:


>>> re.findall(r'(d{3,4}-)?(d{7,8})','020-82228888n0357-4227865') 
[('020-', '82228888'), ('0357-', '4227865')]

findall有一个特性,就是如果结果中有捕获的分组,则将捕获的分组组成tuple返回。利用这个特点,和上面提到的分组,但是不捕获的语法,可以得到我们想要的结果:


>>> re.findall(r'(?:d{3,4}-)?d{7,8}','020-82228888n0357-4227865') 
['020-82228888', '0357-4227865']
>>> re.findall(r'(?:d{3,4}-)?d{7,8}','020-82228888n4227865')  
['020-82228888', '4227865']

在正则表达式中,也可以通过1,2等来指代之前捕获的字符串组合。这个经常用于单双引号的正确匹配:


>>> sentence = """You said "why?" and I say "I don't know"."""
>>> re.findall(r'["'](.*?)["']', sentence)
['why?', 'I don']
>>> re.findall(r'(["'])(.*?)1', sentence)
[('"', 'why?'), ('"', "I don't know")]

此外,如果觉得1,2这种表示可读性不好的话,还可以给捕获起一个英文名字。如下例子中,实现了两种不同的日期格式之间的转换:


>>> sentence = "from 12/22/1629 to 11/14/1643"
>>> re.sub(r'(?P<month>d{2})/(?P<day>d{2})/(?P<year>d{4})', r'g<year>-g<month>-g<day>', sentence) 
'from 1629-12-22 to 1643-11-14'

但是,这种命名引用捕获的方式,在findall、search中却是无效的:


>>> sentence = """You said "why?" and I say "I don't know"."""
>>> re.findall(r'(?P<quote>["'])(.*?)g<quote>', sentence)  
[]
>>> re.search(r'(?P<quote>["'])(.*?)g<quote>', sentence)   
>>> re.search(r'(?P<quote>["'])(.*?)1', sentence)  
<_sre.SRE_Match object; span=(9, 15), match='"why?"'>
>>> re.search(r'(?P<quote>["'])(.*?)1', sentence).groupdict()
{'quote': '"'}

总结

以上就是Python正则表达式中关于分组捕获的全部内容了,希望本文的内容对大家的学习或者使用python能能带来一定的帮助,如果有疑问大家可以留言交流,如果有疑问大家可以留言交流。下一篇文章,我会继续总结一下正则表达式匹配时的贪婪/非贪婪特性。 请继续关注编程网。

--结束END--

本文标题: Python正则表达式教程之二:捕获篇

本文链接: https://www.lsjlt.com/news/13623.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python正则表达式入门篇
    本文主要为没有使用正则表达式经验的新手入门所写。 转载请写明出处 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression...
    99+
    2023-01-31
    入门篇 正则表达式 python
  • 怎么理解Java正则表达式捕获组
    这篇文章主要讲解了“怎么理解Java正则表达式捕获组”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java正则表达式捕获组”吧!undefined普通捕获组(Expression)命...
    99+
    2023-06-02
  • js正则表达式之前瞻后顾与非捕获分组
    目录前瞻后顾与捕获分组的结合使用捕获分组与非捕获分组前瞻、后顾与负前瞻、负后顾总结前瞻后顾与捕获分组的结合使用 在现实的应用场景中,捕获分组或非捕获分组通常被限制在前瞻后顾条件内,...
    99+
    2024-04-02
  • Python入门教程(二十九)Python的RegEx正则表达式
    RegEx 或正则表达式是形成搜索模式的字符序列。 RegEx 可用于检查字符串是否包含指定的搜索模式。 RegEx 模块 Python 提供名为 re 的内置包,可用于处理正则表达...
    99+
    2023-05-18
    Python RegEx Python正则表达式
  • Python正则表达式的使用教程
    这篇文章主要介绍“Python正则表达式的使用教程”,在日常操作中,相信很多人在Python正则表达式的使用教程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python正则表达式的使用教程”的疑惑有所帮助!...
    99+
    2023-06-16
  • JavaScript正则表达式之非捕获性分组的示例分析
    这篇文章主要介绍了JavaScript正则表达式之非捕获性分组的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。非捕获性分组定义子表达...
    99+
    2024-04-02
  • Python全栈之正则表达式
    目录1. 正则表达式_匹配单个字符2. 正则表达式_匹配多个字符3. 正则表达式_匹配分组小提示:4. 小练习答案:总结1. 正则表达式_匹配单个字符 正则表达式在线测试: http...
    99+
    2024-04-02
  • python进阶之正则表达式
    概念:   正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 目的?       给定一个正则表达式和另一个字符串,我...
    99+
    2023-01-30
    进阶 正则表达式 python
  • Python正则表达式保姆式教学详细教程
    目录一、re模块1.导入re模块2.findall()的语法:二、正则表达式1.普通字符2.元字符(二)正则的使用1.编译正则2.正则对象的使用方法3.Match object 的操...
    99+
    2024-04-02
  • python正则表达式
    笔记:一:简介 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 主要介绍Python中常用的正则表达式处理函数 提高工作效率,完成内置函数无法完成的任务! 搜索常用正则表达式!-...
    99+
    2023-01-30
    正则表达式 python
  • python 正则表达式
    正则表达式的作用:用来匹配字符串 一、字符串方法 字符串提供的方法是完全匹配,不能进行模糊匹配 s = 'hello world' # 字符串提供的方法是完全匹配,不能进行模糊匹配 print(s.find('ll')) # 2 ...
    99+
    2023-01-30
    正则表达式 python
  • Python进阶篇之正则表达式常用语法总结
    目录正则表达式概述1、点-匹配所有字符2、星号-重复匹配任意次3、加号-重复匹配多次4、 花括号-匹配指定次数5、 问号-贪婪模式和非贪婪模式6、方括号-匹配几个字符之一7、起始位置...
    99+
    2024-04-02
  • Python爬虫之正则表达式(1)
    廖雪峰正则表达式学习笔记 1:用\d可以匹配一个数字;用\w可以匹配一个字母或数字; '00\d' 可以匹配‘007’,但是无法匹配‘00A’; ‘\d\d\d’可以匹配‘010’; ‘\w\w\d’可以匹配‘py3’; 2...
    99+
    2023-01-30
    爬虫 正则表达式 Python
  • python模块之re(正则表达式)
    匹配模式 re.ASCII同re.A,对应的内联标识为(a),用于向后兼容。使元字符\w, \W, \b, \B, \d, \D, \s和\S仅匹配ASCII字符。该模式只在string模式下有意义,在byte模式下将被忽略。 re.DE...
    99+
    2023-01-31
    模块 正则表达式 python
  • python--模块之re正则表达式
    简介: 正则表达式本身是一个小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,我们可以通过直接调用来实现正则匹配。 正则表达式基础知识: --普通字符匹配自身 abc ----abc --元字符 . :匹...
    99+
    2023-01-30
    模块 正则表达式 python
  • 爬虫之正则表达式
    1.学习爬虫,为什么必须会正则表达式?    我们爬取一些网页具体内容时,只需要这个网页某个标签的一部分内容就足够,或者是这个标签的某个属性的值时,用普通的 xpath 或者css.selector是不能完成的,此时我们就需用到正则表达式...
    99+
    2023-01-30
    爬虫 正则表达式
  • 【Java 基础篇】Java 正则表达式
    文章目录 导言一、正则表达式的基本概念二、使用正则表达式的步骤三、示例代码1. 匹配字符串2. 提取匹配的内容3. 替换字符串 总结 导言 正则表达式是一种强大的文本模式匹配工具...
    99+
    2023-09-18
    java 正则表达式 python
  • Python 正则表达式:search
    本文介绍re模块的search的用法复杂匹配 = re.compile(正则表达式): 将正则表达式实例化             +        re.search(要匹配的字符串): 从字符串开头 开始匹配简单匹配 = re.sear...
    99+
    2023-01-31
    正则表达式 Python search
  • Python 正则表达式:split
    作用:用正则表达式的字符分割字符串,正则的字符会被抛弃。本文以 提取URL的地址与参数 为例,介绍re模块的split的用法: 返回值 -> 列表复杂匹配 = re.compile(正则表达式): 将正则表达式实例化         ...
    99+
    2023-01-31
    正则表达式 Python split
  • Python 正则表达式:compile
    本文以匹配×××ID为例,介绍re模块的compile与match的用法复杂匹配 = re.compile(正则表达式): 将正则表达式实例化             +        re.match(要匹配的字符串): 从字符串开 头/...
    99+
    2023-01-31
    正则表达式 Python compile
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作