一、结合match匹配任意字符串

(一)匹配单个字符串

字符 功能
. 匹配任意1个字符(除了\n)
[ ] 匹配[ ]中列举的字符
\d 匹配数字,即0-9
\D 匹配非数字,即不是数字
\s 匹配空白,即 空格,tab键
\S 匹配非空白
\w 匹配单词字符,即a-z、A-Z、0-9、_
\W 匹配非单词字符

(二)匹配多个字符串

字符 功能
* 匹配前一个字符出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有1次
? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m} 匹配前一个字符出现m次
{m,n} 匹配前一个字符出现从m到n次

(三)匹配开头和结尾

字符 功能
^ 匹配字符串开头
$ 匹配字符串结尾

(四)匹配一手机号 (不是以4、7结尾的手机号码(11位))

import re
tel_num = '13411331125'
re_obj = re.compile(r"1[34578][0-9]{8}[0-35-68-9]$")
match_tel_num = re_obj.match(tel_num)
print match_tel_num.group()

(五)匹配一个邮箱 (匹配出163的邮箱地址,且@符号之前有4到20位,例如hello@163.com)

import re
email = "hello@163.com"
# 1、邮箱地址以大小写字母,数字,下划杠组成
# 2、而\w里面还包括汉子,所以不能用。
# 3、{m,n}之间,后面不能有空格
# 4、邮箱地址的.得用\转义,否则按任意字符算
# 5、如果在.com后面不跟上$那么com后还有字符串得情况也同样匹配
match_email = re.match("[a-zA-Z0-9_]{4,20}@163\.com$", email)
print(match_email.group())

(六)匹配0-100之间的数字

import re
num = input("请输入一个0-100之间的数字:")
# 1、0-100首先十位输为1-9
# 2、10-99个位上得数为0-9
# 3、因为有一位数和两位数,所以十位数可以判定位可取可不取得
# 4、被匹配得对象必须为字符串类型
# 5、如果大部分条件满足,只有一部分不满足,那么可以用 |
# 6、一般情况下不要随便加空格,也算一个字符
match_num = re.match("[1-9]?[0-9]$|100", num)
if match_num:print("%s是0-100之间得数字。" % match_num.group())
else:print("%s不是0-100之间得数字。" % num)

二、匹配分组的用法

(一)匹配分组

字符 功能
| 匹配左右任意一个表达式
(ab) 将括号中字符作为一个分组
\num 引用分组num匹配到的字符串
(?P) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串

(二)匹配163,126,qq邮箱

import re
email_list = ["32423423@163.com", "a124223434.com", "sfdsfw@126.com", "47611@qq.com"]
# 1、如果qq后面不用()分组得话,那么匹配不出来
# 2、我们应该分组来处理各种类型得邮箱.
# 3、如果在撇配多个邮箱得时候,我们只需要用 | 分割出各种可能得情况
# 4、如果我们匹配到了邮箱,想看下是什么类型得邮箱用group(1)这个1指的是第一组
# 5、group(n)里得参数意味着获取第几组数据
for email in email_list:match_email = re.match("[0-9a-zA-Z_]{4,20}@(163|126|qq)\.com", email)if match_email:print("%s符合邮箱格式,他是一个%s邮箱。" % (match_email.group(), match_email.group(1)))else:print("%s不符合邮箱格式。" % email)

(三)提取区号和电话号码

import re
phone_num = "0351-5600123"
# 1、要想提取,那么先用正则匹配,然后分组
# 2、以后遇到提取数据一般用正则分组
# 3、区号是以0开始的,并且可以出现三位或者四位
# 4、凡事以后不确定位数的都用?
# 5、电话号码开头不能为0,一般为7位或者8位用{m,n}
match_p_num= re.match("(0\d{2}\d?)-([1-9]\d{6,7}$)", phone_num)
print(match_p_num)
print("提取的区号是:%s" % match_p_num.group(1))

(四)分组的高级用法1

# 匹配出<html>hh</html>
import re
ret = "<html>hh</html>"
# 1、尖括号里面可能出现的是大写字母和小写字母
# 2、而且不同尖括号里的内容大致相同
# 3、尖括号里的东西至少出现1次。用+
# 4、中间的内容位任意字符,可以出现0次以上
# 5、如果我们再重复斜前面的显得有些麻烦,可以选择把重复的内容分组匹配
# 6、\1代表第一次从左往右括号里分组的重复内容
# 7、凡事用正则就把r加上。防止转义了其中带\的
match_ret = re.match(r"<([a-zA-Z]+)>\w*</\1>", ret)
print(match_ret.group())

(五)分组的高级用法2

# 匹配出<html><h1>www.itcast.cn</h1></html>
import re
# 1、匹配网址
# 2、如果尖括号出现多个,在用\1\2容易混淆
# 3、那么我们需要再撇配的内容前加上(?P<name1>)(?P=name1)
# 4、摘取网址信息
# 5、python解释器会提示错误信息,不要理会
ret = "<html><h1>www.itcast.cn</h1></html>"
match_ret = re.match(r"<([a-zA-Z]+)><([a-zA-Z0-9]+)>([w]{3}\.\w+\.cn)</\2></\1>", ret)
print(match_ret.group())
print(match_ret.group(3))
match_ret1 = re.match(r"<(?P<a1>[a-zA-Z]+)><(?P<a2>[a-zA-Z0-9]+)>([w]{3}\.\w+\.cn)"r"</(?P=a2)></(?P=a1)>", ret)
print(match_ret1.group())

三、re模块的高级用法

(一)search的用法 ( 匹配出文章阅读的次数)

import re
ret = "文章的阅读次数位:9999"
# 1、如果想匹配文章的次数,用match就不可以了
# 2、因为match是从字符串开头开始匹配。
# 3、而我先现在需要搜寻任意地方符合正则的字符串
# 4、提炼出次数,全是数字就ok
search_ret = re.search("\d+", ret)
print(search_ret.group())

(二)findall的用法 (统计出python、c、c++相应文章阅读的次数)

import re
ret =  "python = 9999, c = 7890, c++ = 12345"
# 1、search搜索得到第一个符合标准的情况就不搜索了。
# 2、而要想取出全部的数字部分,那么的用findall
# 3、注意findall不需要group
# 4、findall返回的是一个列表
findall_ret = re.findall(r"\d+", ret)
print(findall_ret)

(三)sub的用法

import re
content = """
<div><p>岗位职责:</p>
<p>完成推荐算法、数据统计、接口、后台等服务器端相关工作</p>
<p><br></p>
<p>必备要求:</p>
<p>良好的自我驱动力和职业素养,工作积极主动、结果导向</p>
<p>&nbsp;<br></p>
<p>技术要求:</p>
<p>1、一年以上 Python 开发经验,掌握面向对象分析和设计,了解设计模式</p>
<p>2、掌握HTTP协议,熟悉MVC、MVVM等概念以及相关WEB开发框架</p>
<p>3、掌握关系数据库开发设计,掌握 SQL,熟练使用 MySQL/PostgreSQL 中的一种<br></p>
<p>4、掌握NoSQL、MQ,熟练使用对应技术解决方案</p>
<p>5、熟悉 Javascript/CSS/HTML5,JQuery、React、Vue.js</p>
<p>&nbsp;<br></p>
<p>加分项:</p>
<p>大数据,数理统计,机器学习,sklearn,高性能,大并发。</p></div>
"""
# 1、第一个参数是正则
# 2、第二个参数是符合正则的替换的字符串
# 3、第三个参数是文本内容
# 4、只要把所有的尖括号替换成""就ok了
# 5、如果我们不用?那么相当于开启贪婪模式,那么从第一个尖括号开始,知道遇到最后一个尖括号才结束,里面的内容都被替换
# 6、所以我们必须用?关闭贪婪模式。
# 7、用strip处理所有的空格。
sub_content = re.sub(r"<.+?>", "", content)
print(sub_content.strip())

(四)split的用法 (切割字符串“info:xiaoZhang 33 shandong”)

import re
ret = "info:xiaoZhang 33 shandong"
# 1、如果字符串中出现了多种富豪,那么不能用普通的字符串切割,会很麻烦,应该用正则切割
# 2、切割后返回一个列表
# 3、第一个参数是正则需要处理的富豪
# 4、注意如果出现空格,则必须打出来。否则效果不一样split_ret = re.compile(":| ")
split_data = split_ret.split( ret)
print(split_data)

(五)贪婪模式和非贪婪模式

import re
s = "This is a number 234-235-22-423"
# 1、贪婪模式一般针对于match和sub使用
# 2、如果在在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。
match_s = re.match("(.*)(\d+-\d+-\d+-\d+)", s)
# 打印效果如下-因为处于贪婪模式,只给你留一个符合匹配的。
print(match_s.group(1))
print(match_s.group(2))
# This is a number 23
# 4-235-22-423
# 3、关闭贪婪模式
match_s1 = re.match("(.*?)(\d+-\d+-\d+-\d+)", s)
# 这样的话只要后年有满足的条件,就让后面满足
print(match_s1.group(1))
print(match_s1.group(2))
# This is a number
# 234-235-22-423

python学习--re模块相关推荐

  1. Python学习--Selenium模块

    1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台 转载于:https://www.cnblo ...

  2. python学习 - copy模块的浅复制(copy)与深复制(deepcopy)

    python学习 - copy模块的浅复制(copy)与深复制(deepcopy) 简介 copy.copy()详解 copy.deepcopy()详解 简介 在使用列表或者字典进行传递参数的时候,可 ...

  3. 【Python】Python学习----第一模块笔记

    1.python是什么? python是动态解释型的强类型定义语言. python官方版本的解释器是CPython.该解释器使用C语言开发. 当前主要使用3.x版本的python. 2.第一个pyth ...

  4. Python学习:模块

    本文来自:入门指南 开胃菜参考:开胃菜 使用Python解释器:使用Python解释器 本文对Python的简介:Python简介 Python流程介绍:深入Python流程 Python数据结构:P ...

  5. Python学习 - 常用模块(二)

    目录 一. 常用模块 - hashlib 二. 常用模块 - hmac 三. 常用模块 - logging 四. 常用模块 - re 五. 常用模块 - requests 六. 常用模块 - para ...

  6. Python学习笔记-模块介绍

    (一)-模块概念和基本使用 python是由一系列的模块组成的,每个模块就是一个py为后缀的文件,同时模块也是一个命名空间,从而避免了变量名称冲突的问题.模块我们就可以理解为lib库,如果需要使用某个 ...

  7. 大智慧数据文件python_马克的Python学习笔记#模块和包 3

    让目录或者zip文件成为可以运行的脚本 我们的程序已经从一个简单的脚本进化为一个涉及多个文件的应用.我们希望能有某种简单的方式来让用户运行这个程序 如果应用程序已经进化为由多个文件组成的"庞 ...

  8. python学习之模块--模块(五)

    5.10 包 5.10.1 包的概念 [官网解释] Packages are a way of structuring Python's module namespace by using " ...

  9. py导入包异常跳出_马克的Python学习笔记#模块和包

    把模块按层次结构组织成包 模块和包是任何大型项目的核心,就连Python安装程序它本身也是一个包.创建一个软件包结构是非常简单的,我们只要把代码按照我们所希望的方式在文件系统上进行组织并且确保每个目录 ...

  10. Python学习之模块学习

    模块是最高级别的程序组织单元.每一份单独的Python代码文件(后缀名是.py的文件)就是一个单独的模块. 模块相关的常用语句有三个: 1)import语句 import -as,比如我们觉得impo ...

最新文章

  1. Nat. Mach. Intell.| 机器学习显著降低药物组合筛选成本
  2. 《强化学习周刊》第25期:DeepMind提出无模型风险敏感强化学习、谷歌发布 RLDS数据集生态系统...
  3. 网路游侠:日志审计系统与SOC的区别
  4. 内存写越界导致破环堆结构引起的崩溃问题定位经验[如报错malloc(): memory corruption或free(): invalid next size]...
  5. MS DOS窗口进入JAVA源程序,从java程序运行MS-DOS命令
  6. SVN刷新不及时,要手动操作
  7. oa导入表格html,oa系统表单模板导入操作过程
  8. Ethereum Casper 101
  9. VC14(VC2015)安装失败,0x80240017 - 未指定的错误,解决办法
  10. kodi连接远程服务器,私人影音服务器奶妈级入门篇(1)——Jellyfin for Kodi客户端设置方法...
  11. Flash实例教程:AS3代码简单表现照片底片效果
  12. HR面试常见问题汇总
  13. 针对商品标题冗长问题,阿里工程师怎么解决?
  14. python 实现otu表水平转化
  15. a标签href的几种写法
  16. MySQL 数据库单表查询——高级查询
  17. 解密微信小程序用户敏感数据获取用户信息
  18. 花旗软件DWH实习回顾
  19. 【SQL Server】数据库开发指南(二)MSSQL数据库开发对于库、表、数据类型、约束等相关操作
  20. 球体与简单几何体的切接问题

热门文章

  1. 把握新生代家装消费趋势,开启“双旦礼遇季”,修嗒嗒线上线下同欢庆!
  2. No module named ‘PCV‘与解决OSError: xxx not found.
  3. CodeForce 538-F A Heap of Heaps(主席树)
  4. How Big Data Can Help Save the World
  5. 虚拟与现实的距离——VR 产业链史上最全梳理收藏版本
  6. d7302航班_菲律宾马尼拉回国稳定航班更新
  7. 呼叫中心能为企业带来多少益处
  8. 百度借百分之百布局移动终端
  9. 国家基本比例尺分幅土地利用现状图制作
  10. cll创建的uniapp小程序动态更改manifest.json