一、从一个需求出发

现在有一个Info.txt的文本信息:

姓名  地区  身局  体重  电话
况咏蜜  北京  171  48  13651054608
王心颜  上海  169  46  13813234424
马纤羽  深圳  173  50  13744234523
乔亦菲  广州  172  52  15823423525
罗梦竹  北京  175  49  18623423421
刘诺涵  北京  170  48  18623423765
岳妮妮  深圳  177  54  18835324553
贺婉萱  深圳  174  52  18933434452
叶梓遭  上海  171  49  18042432324
杜姗姗  北京  167  49  13324523342

现在需要将个人用户信息的电话号码提取出来,根据文件读写的方法实现如下:

telephone_number = []
with open("Info.txt",'r+',encoding="UTF-8") as f:for line in f:print(line)name,region,height,weight,phone = line.split()if phone.startswith("1"):telephone_number.append(phone)
print(telephone_number)

这里面使用的是文件读写操作和字符串方法,能够满足实际需求,但是操作效率低。
引入正则表达式字符串匹配的高效率用法

import re
with open("Info.txt",'r+',encoding="UTF-8") as f:telephone_number = re.findall("[0-9]{11}",f.read())print(telephone_number)

系不系很神奇,仅仅用了两行代码实现了上面的需求,这就是正则表达式,利用高效的字符匹配方法,迅速提取满足需求的信息。在介绍Python正则表达式的使用前,先介绍一些基本或者常用的正则表达式匹配规则。

二、常用的正则表达式匹配规则

  • .:默认匹配除\n之外的任意一个字符;
  • ^:匹配以某字符开头;
  • $:匹配字符结尾;
  • *:匹配*号前的字符0次或多次
  • +:匹配前一个字符1次或多次
  • ?:匹配前一个字符串1次或0次
  • {m}:匹配前一个字符m次
  • {n,m}:匹配前一个字符n到m次
  • |:匹配|左或|右的字符
  • (...):分组匹配,比如:re.search("(abc){2}a(123|45)","abcabca123")或者匹配abcabca45
  • \A:只从字符开头匹配,同^
  • \Z:匹配字符串结尾,同$
  • \d:匹配数字0-9
  • \D:匹配非数字字符
  • \w:匹配[A-Za-z0-9]
  • \W:匹配非[A-Za-z0-9]
  • \s:匹配空白字符,比如\t、\n、\r

至于常用的正则表达式参考:最全的常用正则表达式大全

三、Python的re匹配语法

re的匹配语法有以下几种:

  • re.match:从头开始匹配
  • re.search:全局匹配,匹配到第一个符合条件的元素
    • group:字符串格式
    • groups:元组
    • groupdict:字典(分组匹配)
  • re.findall:把所有匹配的字符串放到以列表中的元素返回
  • re.split:以匹配到的字符串当做列表分隔符
  • re.sub:匹配字符并替换
  • re.fullmatch:全部匹配,整个字符串匹配成功就返回object,否则就返回None

常用方法的介绍:

  1. re.match()方法从字符串的开头进行匹配,如果开始没有匹配到则返回None。

    import re
    # 从字符串的开头进行匹配,如果开头没有匹配到则返回None
    print(re.match("[0-9]+","ab123preabc123abckkk"))
    print(re.match("[0-9]+","123preabc123abckkk"))
    # <re.Match object; span=(0, 3), match='123'>
    

    re.match(pattern,string,flags=0)
    从起始位置开始根据模型去字符串中匹配指定内容,匹配单个:

    • pattern:正则表达式
    • string:要匹配的字符串
    • flags标志位:用于控制正则表达式的匹配方式
  2. re.search()方法:全局匹配,匹配到第一个符合条件的·re.Match object·对象。

    import re
    # 除\n之外的任意一个字符
    print(re.search(".+","\n\n\n"))
    # None
    # 获取到的值以字符串形式输出
    print(re.search(".+","trainingl"))
    # <re.Match object; span=(0, 9), match='trainingl'>
    

    re.search("^alex",'alex1223\n...656alex').group():匹配以“alex”开头的字符串。
    re.search("alex$",'alex1223\n...656alex').group():匹配以“alex”结尾的字符串。
    以解析身份证号为例,介绍group()、groups()和groupdict()方法。

    id_num = "421083199811302356"
    re.search("[0-9]{6}",id_num).group()
    # '421083'
    # 返回元组
    re.search("([0-9]{3})([0-9]{3})([0-9]{8})",id_num).groups()
    # ('421', '083', '19981130')
    # 返回字典
    re.search("(?P<province>[0-9]{3})(?P<city>[0-9]{3})(?P<birthday>[0-9]{8})",id_num).groupdict()
    # {'province': '421', 'city': '083', 'birthday': '19981130'}
    
  3. re.findall:把所有匹配的字符串放到以列表中的元素返回。

    import re
    # 返回匹配到的元素列表
    re.findall(".","training")
    # ['t', 'r', 'a', 'i', 'n', 'i', 'n', 'g']
    re.findall("\D+","sgdhsj1223wgdjwk2323wdjwhj")
    # ['sgdhsj', 'wgdjwk', 'wdjwhj']
    
  4. re.split:以匹配到的字符串当做列表分隔符。

    import re
    # 以数字分割元素,返回值是列表
    re.split("\d+","sgdhsj1223wgdjwk2323wdjwhj")
    # ['sgdhsj', 'wgdjwk', 'wdjwhj']
    
  5. re.sub("匹配模式","替换串","匹配字符串","匹配次数count")

    import re
    # count指定替换的次数
    re.sub("abc","ABC","abcdefgabcdddabc",count=2)
    # 'ABCdefgABCdddabc'
    
  6. re.fullmatch:全部匹配,整个字符串匹配成功就返回object,否则就返回None。比较少用,因为一般如果能完整匹配到整个字符串,那么使用re就没有意义了。

模式编译再使用:

(i) 先编译,再匹配
prog = re.compile(pattern)
result = prog.match(string)

(ii)等价于:result = re.match(pattern,string)

补充:Flags标志符

  • re.I:忽略大小写
  • re.M:多行模式,而不是忽略换行将整个文本当做一个长字符串。
  • re.S(DOTALL):改变.的行为,make the ‘.’ special character match any character at all ncluding a newline; without thisflag, “.” will match anything except a newline.

【专题】Python正则表达式re模块使用相关推荐

  1. python 正则表达式re 模块的使用

    python 正则表达式re 模块的使用 文章目录: 一.re模块介绍 1.re模块说明 2.官方文档给出的文档 3.别人总结的成表格中的内容 二.re模块使用介绍 1.常用函数源码 1.常用的函数介 ...

  2. Python 正则表达式re模块的使用

    Python 正则表达式re模块的使用 基本上所有的编程语言都会有正则表达式,正则表达式是用来匹配一段字符串的表达式. 在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用内置模块re. ...

  3. python中re模块的span,详解Python正则表达式re模块

    正则是处理字符串最常用的方法,我们编码中到处可见正则的身影. 正则大同小异,python 中的正则跟其他语言相比略有差异: 1.替换字符串时,替换的字符串可以是一个函数 2.split 函数可以指定分 ...

  4. python正则表达式re模块之findall函数

    python正则表达式re模块之findall函数 1. re.findall函数介绍 2. findall函数捕获分组 3. re.findall中正则表达式(.*?) 4. re.findall中 ...

  5. python正则表达式需要模块_使用Python正则表达式模块,让操作更加简单

    处理文本数据的一个主要任务就是创建许多以文本为基础的特性. 人们可能想要在文本中找出特定格式的内容,比如找出存在于文本中的电子邮件,或者大型文本中的电话号码. 虽然想要实现上述功能听起来很繁琐,但是如 ...

  6. Python正则表达式re模块简明笔记

    简介 正则表达式(regular expression)是可以匹配文本片段的模式.最简单的正则表达式就是普通字符串,可以匹配其自身.比如,正则表达式 'hello' 可以匹配字符串 'hello'. ...

  7. python正则表达式——re模块

    参考:python文档re --- 正则表达式操作 - Python 3.10.0 文档 目录 1.整体了解 2. 语法 3. re.match 4. re.search re.match与re.se ...

  8. python findall函数_Ramp;Python Data Science系列:数据处理(11)Python正则表达式re模块(三)...

    前言 使用正则表达式进行匹配,可以直接调用模块级函数,如match().search().findall()等,函数第一个参数是匹配的正则表达式,第二个参数则为要匹配的字符串.也可以使用re.comp ...

  9. Python正则表达式-re模块奇技淫巧

    文章目录 正则表达式 概念 构成 re模块应用 常用正则表达式 数字 字符 其他 小结 正则表达式 概念 正则表达式作为计算机科学的一个概念,通常被用来检索.替换那些符合某个规则的文本.正则表达式是对 ...

最新文章

  1. 外媒:社交媒体的大量使用与精神疾病有关
  2. cdn加速的原理是怎么样的
  3. 【正一专栏】第1球和第500球价值一样
  4. 深究AngularJS——排序
  5. JS判断当前的浏览器类型
  6. ie不支持max-height的解决之法
  7. 【Leetcode | 13】56. 合并区间
  8. Java 答疑:编译器和解释器有何区别?Java 语言属于编译型编程语言还是解释型编程语言?
  9. C#中IEnumerableT.GroupBy()的简单使用
  10. Python进制转换(利用栈)
  11. php if多条件_PHP的数据类型
  12. android开根号,定点数开根号的性能问题
  13. Like Sunday, Like Rain - JavaScript运算符优先级
  14. “深入浅出”学Golang!就选《Head First Go》
  15. bzoj 3505: [Cqoi2014]数三角形 组合数学
  16. 马建威android视频,5.25春季班高级班第三期第五节课课堂总结
  17. Linux故障处理——磁盘空间满缺找不到对应大文件
  18. 1.23 定语从句 感叹句
  19. Windows系统时间同步出错解决办法(w32tm /register按回车,可能是为了解决时间COM注册的问题)
  20. 猎聘Q1营收毛利齐增,在线招聘的“春天”要来了么?

热门文章

  1. 【机器学习】李宏毅——Adversarial Attack(对抗攻击)
  2. MySQL创建民族表的SQL语句
  3. 笔记:单轴上的动量守恒
  4. 钉钉请假单如何下载到电脑打印
  5. Dagger2是什么鬼
  6. 斑马PDA对接Android
  7. PLC数据采集网关有哪些作用,PLC数据采集网关如何正确进行使用
  8. 工业相机--海康威视相机
  9. excel 表中几个关联汇总函数
  10. size(),length和length()的区别(最详细版)