一、常用匹配模式

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
#贪婪匹配:从后面开始
#()只需要提取括号中的内容,顺序从外到内
line="pyrene11111pppp111 a"
# regex_str=".*(p.*p).*"  #这个是贪婪模式,从后面匹配得到pp
regex_str=".*?(p.*p).*" #前面有?非贪婪模式,从前面匹配,后面是贪婪模式,后面匹配pyrene11111ppppmatch_obj=re.match(regex_str,line)
if match_obj:print(match_obj.group(1))#?非贪婪匹配:问号放左边从左边开始匹配
line="pyrene00000000p pppp123"
regex_str=".*?(p.*?p).*"
match_obj=re.match(regex_str,line)
if match_obj:print(match_obj.group(1))#+的用法
line="pyrene00000000p pppp123"
regex_str=".*(p.+p).*"    #这是贪婪模式,所以会从后面开始,这里+最低出现一个,所以结果为ppp
match_obj=re.match(regex_str,line)
if match_obj:print(match_obj.group(1))#{n},限定前面字符出现几次,{1,3}前面字符出现最低1次最多3次
line="pyrene00000000p pppssp123"
# regex_str=".*(p.{1}p).*"  #由于必须出现前面的字符一次,这又是贪婪模式,所以会从后往前找,结果pp
regex_str=".*(p.{2}p).*" #这里满足,结果pssp
match_obj=re.match(regex_str,line)
if match_obj:print(match_obj.group(1))#|代表或者
line="pyrene123"
# regex_str="(pssp123|pyrene)"
regex_str="((pssp|pyrene)123)"
match_obj=re.match(regex_str,line)
if match_obj:print(match_obj.group(2)) #这里值为1的时候匹配pyrene123,参数为2匹配pyrene#[]
line="pyrene123"
regex_str="([abc]pyrene123)" #表示第一个字符为中括号中任意字符,就能够匹配到
match_obj=re.match(regex_str,line)
if match_obj:print(match_obj.group(2))#[] 代表区间 如果里面有.*就不表示特殊含义,^取反
line="18511391111"
# regex_str="(1[48357][0-9]{9})"#这里表示第一个字符是1,第二个字符是中括号中间的内容,第三个字符是0-9之间的树,第四个是前面的匹配9次
regex_str="(1[48357][^1]{9})"#第一个字符表示第一个是1,第二个是中括号的所有内容,第三个字符只要不是1就可以,第四个字符是前面的数字匹配9次match_obj=re.match(regex_str,line)
if match_obj:print(match_obj.group(1))#\s代表空格
line="你 好"
regex_str="(你\s好)"
match_obj=re.match(regex_str,line)
if match_obj:print(match_obj.group(1))#\S 表示除了空格都可以
line="你a好"
regex_str="(你\S好)"
match_obj=re.match(regex_str,line)
if match_obj:print(match_obj.group(1))#\w 作用匹配[A-Za-z0-9_],\W作用相反
line="你a好"
regex_str="(你\W好)"
match_obj=re.match(regex_str,line)
if match_obj:print(match_obj.group(1))#[\u4E00-\u9FA5]  提取中文
line="你a好"
regex_str=".*?([\u4E00-\u9FA5])" #非贪婪模式 从左开始匹配
match_obj=re.match(regex_str,line)
if match_obj:print(match_obj.group(1))#
line = "xxx2000年"
regex_str = ".*(\d)年"#这个只获取到了0怎么获取全部呢?方法一是加?,方法二加上{4}
match_obj = re.match(regex_str, line)
if match_obj:print(match_obj.group(1))

小练习:匹配下面的出生日期

line="xxx出生于2001年6月"
line="xxx出生于2001/6/1"
line="xxx出生于2001-6-1"
line="xxx出生于2001-06-01"
line="xxx出生于2001-06"
regex_str=".*出生于(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}|[月/-]$|$))"
match_obj=re.match(regex_str,line)
if match_obj:print(match_obj.group(1))

  

re.match和re.compile()

import re
#3位数字-3到8个数字 \d{3}-\d{3-8}#下面如果匹配成功就打印出来
m=re.match(r"\d{3}-\d{3,8}","010-222346512")
print(m.string)#分组
m=re.match(r"(\d{3})-(\d{3,8})","010-1231231")
print(m.group(0)) #原始结果
print(m.group(1)) #第一个分组括号
print(m.group(2))
print(m.groups())  #把所有的组全部放到元祖里面#匹配时分秒
t='20:15:45'
m=re.match(r'^(0[0-9]|1[0-9]|2[0-9|[0-9])\:(0[0-9]|1[0-9]|2[0-9|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$',t)  #注意这里:要去掉特殊含义,$结尾后面的引号不能有空格
print(m.groups())#分割字符串
p=re.compile(r'\d+')  #compile就是把一个模式编译好,然后拿着这个模式到处匹配
print(p.split("sdaasd1321321"))

  

转载于:https://www.cnblogs.com/pyrene/p/7475876.html

第八篇、正则表达式 re模块相关推荐

  1. Python之路【第八篇】:Python模块

    阅读目录 一.模块和包 模块(module)的概念: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到 ...

  2. Python开发【第六篇】:模块

    Python开发[第六篇]:模块 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一 ...

  3. flask 第八篇 实例化flask时的参数配置

    Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? 它能给我们带来怎么样的方便呢? 首先展示一下: from ...

  4. Python之路【第八篇】:堡垒机实例以及数据库操作

    Python之路[第八篇]:堡垒机实例以及数据库操作 堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于 ...

  5. 【哈工大SCIR】八篇长文被ACL 2020录用

    ACL 2020, The 58th Annual Meeting of the Association for Computational Linguistics 原定于2020年7月5日至10日在 ...

  6. Excel电子表格运用技巧介绍——第八篇

    第八篇 1.如何在已有的单元格中批量加入一段固定字符? 例如:在单位的人事资料,在excel中输入后,由于上级要求在原来的职称证书的号码全部再加两位,即要在每个人的证书号码前再添上两位数13,如果一个 ...

  7. CRM项目开发【实操篇----市场活动模块】

    CRM项目开发[实操篇----市场活动模块] 前言:本项目来源于B站动力节点视频,CRM项目开发 使用的后端技术栈主要是SSM框架,不涉及boot,老师讲的非常细致,推荐 关于流程图部分,由于是老师创 ...

  8. 手把手第八篇:小程序组件的使用

    在上期文章中,我们主要聊了聊在小程序开发过程中,通过网络请求获取对应的服务器域名与请求接口的使用.本期文章中,我们要一起聊聊如何在开发过程中使用小程序组件.小程序的组件分为两类: 内置组件 自定义组件 ...

  9. 第八篇!95后天才少年曹原再发Nature!

    来源:自科在线 编辑:nhyilin 2021年7月21日,"石墨烯驾驭者"曹原作为第一作者和通讯作者在国际顶尖学术期刊 Nature 发表了题为:Pauli-limit viol ...

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

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

最新文章

  1. offsetof使用小结
  2. 如何具体学习计算机视觉
  3. 一个XOR问题的实例---神经网络的权重到底是如何变化的
  4. 疾风之刃的最新服务器,《疾风之刃》服务器数据互通(合服)提前预览
  5. openfoam安装中出现allmake error_深入理解 OpenFOAM 环境与编译过程
  6. 当 Flutter 遇见 Web,会有怎样的秘密?
  7. Cloud Fiori Launchpad
  8. php提交表单显示错误,php – 在提交注册表单时使用jQuery显示错误
  9. mgg mysql_mgg文件怎么转换mp3格式?
  10. 时间管理,从洗碗开始
  11. mac. mysql 设置root_Mac平台重新设置MySQL的root密码
  12. C#写的ftp上传类
  13. 前端调用mysql异步_python链家网高并发异步爬虫asyncio+aiohttp+aiomysql异步存入数据...
  14. 基于Vue.js 2.x系列 + Element UI + RBAC/AUTH权限 的响应式后台管理系统
  15. 软件工程师欲发动DDoS攻击白宫网站 抗议特朗普就任总统
  16. UE4虚幻引擎UI界面动画制作!
  17. 如何判断选择专业数字功放芯片
  18. Paper笔记: 《LaVAN: Localized and Visible Adversarial Noise》
  19. Linux 灾难恢复
  20. 做短视频时如何将文字转为语音?分享三个小方法,教你轻松配音

热门文章

  1. 2018年全国心理测试技术研究、应用及专业人员培养研讨会活动简报
  2. 签名不对,请检查是否与开放平台一致
  3. 2022T电梯修理考试模拟100题模拟考试平台操作
  4. css特效开发,7款吸引人眼球的jQuery/CSS3特效实例分享
  5. 骗子给韩国喜意来送来最深刻的道歉书
  6. 2019/6/30,道歉书
  7. python模拟按键网游_Python实现windows下模拟按键和鼠标点击的方法
  8. QT之创建登录对话框
  9. 《Java语言程序设计——坦克大战单机游戏》源码以及实验报告
  10. HPB主网接入最佳实践之Java版