码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python正则表达式完全指南


    合集 - python全景系列(29)
    1.<Python全景系列-1> Hello World,1分钟配置好你的python环境05-142.< Python全景系列-2 > Python数据类型大盘点05-153.< Python全景系列-3 > Python控制流程盘点及高级用法、神秘技巧大揭秘!05-174.< Python全景系列-4 > 史上最全文件类型读写库大盘点!什么?还包括音频、视频?05-185.< Python全景系列-5 > 解锁Python并发编程:多线程和多进程的神秘面纱揭晓05-216.< Python全景系列-6 > 掌握Python面向对象编程的关键:深度探索类与对象05-247.< Python全景系列-7 > 提升Python编程效率:模块与包全面解读05-258.< Python全景系列-8 > Python超薄感知,超强保护:异常处理的绝佳实践05-299.< Python全景系列-9 > Python 装饰器:优雅地增强你的函数和类05-3110.Python生成器深度解析:构建强大的数据处理管道06-0511.掌握Python文件操作:从基础到高阶的全方位探索06-1212.Python单元测试之道:从入门到精通的全面指南07-1813.深入探索 Django Rest Framework07-1314.跨越HTTP无状态边界:Cookie与Session在Django中的实战应用07-1115.Django ORM:最全面的数据库处理指南07-1016.详解Django请求与响应:深入理解Web Http交互的核心机制07-0917.Python Django 模版全解与实战07-0818.Django容易被遗忘却无比重要的框架默认文件介绍及使用方法07-0719.Python 爬虫实战:驾驭数据洪流,揭秘网页深处07-0620.Python史上最全种类数据库操作方法,你能想到的数据库类型都在里面!甚至还有云数据库!07-0521.Python Django 零基础从零到一部署服务,Hello Django!全文件夹目录和核心代码!07-0422.Python Django Web开发实战06-3023.Python Flask - 快速构建Web应用详解06-2924.深入Python网络编程:从基础到实践06-2525.一文掌握Python多线程与多进程06-20
    26.Python正则表达式完全指南06-13
    27.Python的Lambda函数: 一把极简编程的瑞士军刀06-0828.Python 列表推导式:简洁、高效的数据操作艺术06-0729.Python日志模块:实战应用与最佳实践07-19
    收起

    本篇文章将深入探讨python的一项强大工具:正则表达式。正则表达式是一个强大的文本处理工具,可以用来匹配,搜索,替换和解析文本。我们将逐步展示如何在Python中使用正则表达式,包括其基本语法,常见用法和一些高级技巧。而在最后的“one more thing”部分,我们将探索一个不为人知但又非常有用的正则表达式的技巧。

    简单正则表达式匹配

    在Python中,re模块提供了正则表达式的支持。我们先从最简单的字符匹配开始。

    import re
    
    # 检查字符串是否包含字母"a"
    txt = "Hello, world!"
    match = re.search("a", txt)
    print(match)  # 输出:None,因为"a"没有在字符串中
    

    在这个例子中,我们使用了re.search()函数来查找字符串中是否包含"a"。这是最基础的字符匹配,但已经可以看出正则表达式的用处。例如,你可以用这种方式检查一个电子邮件地址是否包含"@"。

    使用元字符

    正则表达式的真正威力在于其元字符的使用,比如.,*,?,[]等等。下面的例子展示了如何使用.(点)元字符匹配任何字符(除了新行)。

    txt = "Hello, world!"
    match = re.search("H.llo", txt)
    print(match.group())  # 输出:Hello
    

    在这个例子中,.字符匹配了"e",使得"H.llo"可以匹配"Hello"。

    使用预定义的字符集

    有时我们希望匹配的是一类字符,而不是单个字符。比如,我们可能想要匹配任何数字。Python的正则表达式提供了预定义的字符集来实现这种功能。\d就代表任何数字。

    txt = "123 Hello, world!"
    match = re.search("\d+", txt)
    print(match.group())  # 输出:123
    

    在这个例子中,\d+匹配了一串数字"123"。

    分组和捕获

    我们可以使用圆括号()创建子模式或组,并使用group()方法来捕获这些组。

    txt = "123 Hello, world!"
    match = re.search("(\d+) (Hello),", txt)
    print(match.group(1))  # 输出:123
    print(match.group(2))  # 输出:Hello
    

    使用正向先行断言

    这是一个高级技巧,它允许我们在不消耗字符的情况下进行匹配。例如,我们可能想找出所有以句号结束但不包含句号的句子。

    txt = "Hello. My name is Python. Nice to meet you."
    matches = re.findall(".*?(?=\\.)", txt)
    for match in matches:
        print(match)  # 输出:Hello,My name is Python,Nice to meet you
    

    在这个例子中,.*?(?=\\.)匹配了所有以句号结束的句子,但并没有消耗句号。

    字符集和范围

    我们之前讨论过预定义的字符集,比如\d。但有时我们可能需要自定义字符集,我们可以使用方括号[]来达成这个目标。例如,我们可以创建一个只包含小写字母的字符集。

    txt = "Hello, World!"
    match = re.search("[a-z]+", txt)
    print(match.group())  # 输出:ello
    

    在这个例子中,[a-z]+匹配了一串连续的小写字母"ello"。注意"Hello"的首字母"H"由于是大写,没有被匹配。

    贪婪匹配和非贪婪匹配

    Python的正则表达式默认是贪婪的,这意味着它们会尽可能匹配更多的字符。但有时我们可能希望进行非贪婪匹配。我们可以通过在量词后面添加问号?来实现这个功能。

    txt = "12345"
    match = re.search("\d+?", txt)
    print(match.group())  # 输出:1
    

    在这个例子中,\d+?进行了非贪婪匹配,只匹配了一个数字"1"。

    零宽断言

    零宽断言允许我们在字符之间设置条件。比如,我们可以使用(?<=a)b来匹配所有在"a"后面的"b"。

    txt = "cab, dab"
    matches = re.findall("(?<=a)b", txt)
    for match in matches:
        print(match)  # 输出:b,b
    

    在这个例子中,(?<=a)b匹配了所有在"a"后面的"b"。

    使用编译的正则表达式

    如果你的程序需要多次使用同一个正则表达式,你可以将其编译为一个正则表达式对象。这可以提高代码的运行效率。

    pattern = re.compile("\d+")
    txt = "123 Hello, world!"
    match = pattern.search(txt)
    print(match.group())  # 输出:123
    

    在这个例子中,我们先编译了正则表达式\d+,然后使用pattern.search()方法来进行匹配。

    One More Thing

    到现在为止,我们已经探讨了Python正则表达式的基础知识。但是在这最后的"One More Thing"部分,我想分享一个不常被提及,但在处理复杂文本模式时非常有用的技巧:命名组。

    命名组允许我们给匹配的组分配一个名字,然后在后面的代码中引用它。这在处理复杂的模式匹配时非常有用。

    txt = "James: 1234567890"
    match = re.search("(?P\w+): (?P\d+)", txt)
    print(match.group('name'))  # 输出:James
    print(match.group('phone'))  # 输出:1234567890
    

    在这个例子中,我们使用了命名组(?P\w+)和(?P\d+)来匹配名字和电话号码,并使用group()方法来获取它们。

    正则表达式是一个非常强大的工具,希望本篇文章能帮你掌握它在Python中的用法。

    如有帮助,请多关注
    个人微信公众号:【Python全视角】
    TeahLead_KrisChang,10+年的互联网和人工智能从业经验,10年+技术和业务团队管理经验,同济软件工程本科,复旦工程管理硕士,阿里云认证云服务资深架构师,上亿营收AI产品业务负责人。

  • 相关阅读:
    《安富莱嵌入式周报》第326期:航空航天级CANopen协议栈,开源USB PD电源和功耗分析,开源EtherCAT伺服驱动板,时序绘制软件,现代机器人设计
    输入/输出的实用性-SOLIDWORKS 2024新功能
    C# Onnx 特征匹配 DeDoDe 检测,不描述---描述,不检测
    java计算机毕业设计宠物云寄养系统源码+系统+lw文档+mysql数据库+部署
    Kafka3.0.0版本——文件存储机制
    安装Anaconda
    终于搞懂了 super(XXXX, self).__init__()的作用是啥了
    手写数字图片识别——DL 入门案例
    Spring Data JPA与Mybatis的对比
    MedNeXt: Transformer-driven Scaling ofConvNets for Medical Image Segmentation
  • 原文地址:https://www.cnblogs.com/xfuture/p/17477067.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号