强烈推荐!Python 这个宝藏库 re 正则匹配

Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作。

在文本解析、复杂字符串分析和信息提取时是一个非常有用的工具,下面总结了 re 模块的常用方法。

一. 预定义字符

d 匹配所有的十进制数字 0-9

D 匹配所有的非数字,包含下划线

s 匹配所有空白字符(空格、TAB等)

S 匹配所有非空白字符,包含下划线

w 匹配所有字母、汉字、数字 a-z A-Z 0-9

W 匹配所有非字母、汉字、数字,包含下划线

二. 特殊字符

  • $:匹配一行的结尾(必须放在正则表达式最后面)
  • ^:匹配一行的开头(必须放在正则表达式最前面)
  • *:前面的字符可以出现0次或多次(0~无限)(贪婪匹配)
  • +:前面的字符可以出现1次或多次(1~无限)(贪婪匹配)
  • ?:变”贪婪模式”为”勉强模式”,前面的字符可以出现0次或1次(非贪婪匹配)
  • 备注:符号.* 贪婪,符号.*? 非贪婪

  • .:匹配除了换行符””之外的任意单个字符
  • |:两项都进行匹配
  • [ ]:代表一个集合,有如下三种情况
  • [abc]:能匹配其中的单个字符

    [a-z0-9]:能匹配指定范围的字符,可取反(在最前面加入^)

    [2-9] [1-3]:能够做组合匹配

    4.{ }:用于标记前面的字符出现的频率,有如下情况:

    {n,m}:代表前面字符最少出现n次,最多出现m次

    {n,}:代表前面字符最少出现n次,最多不受限制

    {,m}:代表前面字符最多出现n次,最少不受限制

    {n}:前面的字符必须出现n次

    三. 反斜杠说明

    字符串中有反斜杠的,需要对反斜杠做转义

    四. 分组

    ():分组字符,可以为匹配到的内容分组,快速获取到分组中的数据 在正则里面 “()” 代表的是分组的意思,一个括号代表一个分组,你只能匹配到 “()” 中的内容。

    group:用于查看指定分组匹配到的内容

    groups:返回一个元组,组内为所有匹配到的内容

    groupdict:返回一个字典,包含分组的键值对,需要为分组命名

    五. 常用方法

  • match:在目标文本的开头进行匹配
  • search:在整个目标文本中进行匹配
  • findall:扫描整个目标文本,返回所有与规则匹配的子串组成的列表,如果没有匹配的返回空列表
  • split
  • re.split(pattern, string[, maxsplit=0, flags=0])split(string[, maxsplit=0])

    作用:可以将字符串匹配正则表达式的部分割开并返回一个列表

    六. 正则表达式函数里面的flags参数说明

    flags定义包括:

    re.I:忽略大小写

    re.L:表示特殊字符集 w, W, b, B, s, S 依赖于当前环境

    re.M:多行模式

    re.S:’.’并且包括换行符在内的任意字符(注意:’.’不包括换行符)

    re.U:表示特殊字符集 w, W, b, B, d, D, s, S 依赖于 Unicode 字符属性数据库

    在 Python 中使用正则表达式之前,先使用以下命令导入 re 模块

    import re

    示例1:具体使用说明

    例如:

    ‘(d)(a)1’ 表示:匹配第一是数字,第二是字符a,第三 1 必须匹配第一个一样的数字重复一次,也就是被引用一次。

    如 “9a9” 被匹配,但 “9a8” 不会被匹配,因为第三位的 1 必须是 9 才可以。

    ‘(d)(a)2’ 表示:匹配第一个是一个数字,第二个是a,第三个 2 必须是第二组()中匹配一样的。

    如 “8aa” 被匹配,但 “8ab”,“7a7” 不会被匹配,第三位必须是第二组字符的复制版,也是就引用第二组正则的匹配内容。

    print(re.match(r'(w{3}).’,”abceeeabc456abc789″).group())print(re.match(r'(w{3}).*’,”abceeeabc456abc789″).group())#*贪婪匹配print(re.match(r'(w{3}).*?’,”abceeeabc456abc789″).group())#?非贪婪匹配print(re.search(r'(d{3})’,”abceeeabc456abc789″).group())print(re.search(r'(w{3})(d+)(1)’,”abceeeabc456abc789abc”).groups())print(re.search(r'(w{3})(d+)(1)’,”abceeeabc456abc789abc”).group(1))print(re.search(r'(w{3})(d+)(1)’,”abceeeabc456abc789abc”).group(2))print(re.search(r'(w{3})(d+)(1)’,”abceeeabc456abc789abc”).group(3))print(re.search(r'(w{3})(d+)(2)’,”abceeeabcs456456abc456789abc”).groups())print(re.search(r'(w{3})(d+)(2)’,”abceeeabcs456456abc456789abc”).group(1))print(re.search(r'(w{3}).*?(1)’,”abceeeabc456abc789abc”).group(1))print(re.search(r'(w{3}).*?(1)’,”abceeeabc456abc789abc”).group(2))print(re.search(r'(w{3})(.*?)(2)’,”abceeeabc456abc789″).group())print(re.search(r'(w{3}).*?(1)’,”abceeeabc456abc789″).group(1,2))print(re.findall(r’d+’,’one11two22three33four44′))print(re.split(r’W+’,’192.168.1.1′)) #W匹配所有非字母、汉字、数字,包含下划线,然后处理完成返回一个列表print(re.split(r'(W+)’,’192.168.1.1′)) #加了括号后做了分组的处理,.号也被分割了print(re.split(r'(W+)’,’192.168.1.1′,1)) #加了一个1这个参数后,表示最大分割深度为1str1 = ”’goodjobisgood: testisgood welldone ”’res1 = re.findall(r’good(.*?)done’,str1)# 如果不使用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始,不会跨行。# 而使用re.S参数以后,正则表达式会将这个字符串作为一个整体,将“”当做一个普通的字符加入到这个字符串中,在整体中进行匹配。res2 = re.findall(r’good(.*?)done’,str1,re.S)print(res1)print(res2)

    示例2:网页信息匹配

    str1 = ‘

    this is a herfgoodjob

    ‘# find = re.search(‘(w+)’, str1)find = re.search(‘.+)”>(?Pw+)’, str1)print(find.groups())print(find.group(1))print(find.group(2))print(find.groupdict())

    示例3:日期匹配

    date1=input(“请输入年月日:”)result1=re.match(r’^(d{4}-d{1,2}-d{1,2})#39;,date1)print(result1.group())

    示例4:邮箱正则匹配

    re_email = r’^[a-zA-Z0-9_]{0,20}@(163|162|Gmail|yahoo).com’email_address = input(‘请输入邮箱’)res = re.search(re_email, email_address)print(res)print(email_address)print(type(res))print(res.group())

    示例5:手机号匹配

    phone=input(“请输入手机号:”)result2=re.match(r’1[35678]d{9}’,phone)print(result2.group())

    郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
    (0)
    用户投稿
    上一篇 2022年6月20日
    下一篇 2022年6月20日

    相关推荐

    • 津云观察|大火的NFT究竟是“钻石”还是“郁金香”?

        这两年,如果要问什么是科技圈与投资圈最炙手可热的新宠,NFT绝对可以和“各路英豪”争争头名。   NFT是什么?NFT,英文全称为Non-Fungible Token,意思是非…

      2022年6月18日
    • 小米MIUI13.5升级名单曝光:小米12Ultra有望一起发布

      小米手机的下一个版本更新 MIUI 13.5 此前已经得到了曝光。今日,爆料者 xiaomiui 放出了号称 MIUI 13.5 的升级名单,此外,小米12 Ultra有望和MIU…

      2022年6月15日
    • 公示!这18个新职业,速了解→

      14日,人力资源和社会保障部向社会公示“民宿管家”“家庭教育指导师”“研学旅行指导师”“机器人工程技术人员”等18个新职业。经公示征求意见、修改完善后,这些新职业将被纳入新版职业分…

      2022年6月18日
    • 都说刘诗诗的妈妈有气质,但看到杨幂的妈妈后,才懂啥叫惊艳

      大家好,我是宝宝!宝宝又来啦! 我们继续来说!娱乐圈的那些事! 娱乐圈 中的明星很多都是有颜值的,很多都是有气质有颜值有魅力的代表,而且她们的五官都是纯天然的,只能说是上天的眷顾了…

      2022年7月5日
    • 中拓互联|中小商家如何低成本开通线上商城,实现数字营销?

      受疫情和大环境影响,国内电商正处在高速发展阶段,不做电商将无商可务。在新电商时代,没货源、不具备线上经营与服务能力是大部份中小商家所面临的共性问题。面对现状,中小商家如何顺势而为?…

      2022年8月31日
    • 全球电子商务收入或将首次出现萎缩

      媒体数字市场展望最新预测下调了2022年全球电子商务收入预估。受供应链问题和通胀影响,全球电子商务收入预计将在2022年同比首次萎缩,较2021年下降2.5%。全球电子商务行业在最…

      2022年8月18日
    • Java 深入JVM分析String StringTable

      文章目录 基本特性: 1、字符串常量池Jdk1.7之前位于方法区,1.7开始位于堆 2、字符串常量池中同样的数据只存储一份(固定大小HashTable存储数据) 3、使用 -XX:…

      2022年6月16日
    • map的常用用法详解

      map是一种映射,是常用的STL容器。(map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器)) 如需使用,需要加一个map头文件。 1.map的定义: m…

      2022年6月13日
    • 什么是复玥棋(Fubiun)

      Fubiun(latin:Fuyeor Byún, 复玥棋) 是2016年发明的。是考验思维的益智类游戏。现在尚有缺点,并没有完全完善。 共 2 色棋子,每方 14 个(一个主棋子…

      2022年7月4日
    • 21世纪小巨人⑧丨追觅科技俞浩:打破垄断后,走进广义机器人的无人区

      编者按:中小企业的稳定快速发展,是我国经济韧性的重要基础。今年我国进一步提出,着力培育“专精特新”企业,在资金、人才、孵化平台搭建等方面给予大力支持。就此,《21世纪经济报道》重磅…

      2022年7月5日

    联系我们

    联系邮箱:admin#wlmqw.com
    工作时间:周一至周五,10:30-18:30,节假日休息