Python内部的re--传闻中的正则模块,是无数初学者心中的噩梦,几乎到了谈正则色变的地步。

1.正则是干什么的

  正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

  也就是说正则做了两件事,一件事就是制定匹配的规则(如:只匹配数字),一件事是对符合规则的数据进行处理(提取、赋值、删除等)。

  那正则究竟有什么实际的用途呢?

  比如说:使用Python在做爬虫时(如爬取拉钩),服务器传回的response数据主体是HTML代码,需要使用正则匹配并提取相应的字段(如职位名称),这样就会获得好多的键值对({'职位名称':'Python高端工程师'},感兴趣的可以看看我的练手小项目

  再比如说:公司领导安排人事部门,统计一下近一年所有投寄的简历,要求汇总姓名、电话等,人事的同事看了下简历,我去,1000+份,工作量太大了,向你求助,这时候,你就可以使用Python循环读取每个文件,使用正则匹配里面的姓名、电话等,保存到Excel里,分分钟完成。

2.正则的第一件事:制定匹配的规则

  Python官方:https://docs.python.org/3.7/library/re.html

  官方文档可阅读性差些,但是胜在“真实”(实用)。

  推荐参考:https://www.jb51.net/tools/zhengze.html

  jb51这个网站对正则的语法,由浅入深的分析,总结的特别好,篇幅太~~~~~~~~~~~~~~长,这里就不复制粘贴了。

  简要说下在Python中如何使用re:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = "问道编程"
__date__ = "2019/03/18 19:43" import re # 匹配手机号码
phone_pat = re.compile('^(13\d|14[5|7]|15\d|166|17[3|6|7]|18\d)\d{8}$') # 匹配规则 get_phone1 = '15012341234'
get_phone2 = '12012341234' # 测试用例 print(phone_pat.match(get_phone1)) # 打印结果,生成匹配对象
print(phone_pat.match(get_phone2)) # 返回None

3.常用的re方法s:

re.compile():

  编译一个正则表达式模式为正则表达式对象,其可用于使用它的匹配 match()search()以及其他方法,为了方便重复使用匹配规则,说明如下:

prog = re.compile(pattern)  # pattern 是匹配规则,字符串,通常前面加r,如  r'\d+'  匹配数字的
result = prog.match(string)
# 相当于
result = re.match(pattern, string)

re.search():

  对字符串进行查找匹配,如果有匹配的数据,则返回第一个匹配的对象,如果没有匹配的对象,则返回None:

import re

result = re.search('\d', 'ads123asd')
print(result) # <_sre.SRE_Match object; span=(3, 4), match='1'>

re.match():

  从字符串的开头开始匹配,如果有匹配的数据,则返回第一个匹配的对象,如果没有匹配的对象,则返回None:

import re

result = re.match('\d', 'ads123asd')
print(result) # None 因为开头就不匹配 ,跟search的区别
result = re.search('ads\d', 'ads123asd')
print(result) # <_sre.SRE_Match object; span=(0, 4), match='ads1'>

re.split():

  常用于字符串的切分,返回一个list,非常实用的功能:

import re

s = 'a,b;c d    e'
a = s.split(' ')
print(a) # ['a,b;c', 'd', '', '', '', 'e'] 使用str自带的切分方法局限性太大
b = re.split(r'[,;\s]+',s)
print(b) # ['a', 'b', 'c', 'd', 'e'] # 使用re的切分工具可以实现多种组合的情况

re.findall():

  获取所有匹配的对象,返回list,也是非常实用的功能:

import re

a = re.compile(r'\d+')    # 获取所有数字
b = a.findall('ax2k3h5b6n7')
print(b) # ['2', '3', '5', '6', '7']

re.sub():

  替换匹配的字段,也是re中非常强大的功能,web项目中常用于博客代码高亮的过滤器中:

import re

b = re.sub(r'\d', 'a', 'b1b23b21b34b124')
print(b)

本文参考:https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215?fr=aladdin

Python常用模块--re的更多相关文章

  1. Python常用模块之sys

    Python常用模块之sys sys模块提供了一系列有关Python运行环境的变量和函数. 常见用法 sys.argv 可以用sys.argv获取当前正在执行的命令行参数的参数列表(list). 变量 ...

  2. Python常用模块中常用内置函数的具体介绍

    Python作为计算机语言中常用的语言,它具有十分强大的功能,但是你知道Python常用模块I的内置模块中常用内置函数都包括哪些具体的函数吗?以下的文章就是对Python常用模块I的内置模块的常用内置 ...

  3. python——常用模块2

    python--常用模块2 1 logging模块 1.1 函数式简单配置 import logging logging.debug("debug message") loggin ...

  4. python——常用模块

    python--常用模块 1 什么是模块: 模块就是py文件 2 import time #导入时间模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的 ...

  5. Python常用模块——目录

    Python常用模块学习 Python模块和包 Python常用模块time & datetime &random 模块 Python常用模块os & sys & sh ...

  6. python 常用模块之random,os,sys 模块

    python 常用模块random,os,sys 模块 python全栈开发OS模块,Random模块,sys模块 OS模块 os模块是与操作系统交互的一个接口,常见的函数以及用法见一下代码: #OS ...

  7. python常用模块之时间模块

    python常用模块之时间模块 python全栈开发时间模块 上次的博客link:http://futuretechx.com/python-collections/ 接着上次的继续学习: 时间模块 ...

  8. python常用模块之subprocess

    python常用模块之subprocess python2有个模块commands,执行命令的模块,在python3中已经废弃,使用subprocess模块来替代commands. 介绍一下:comm ...

  9. python常用模块之string

    python常用模块string模块,该模块可以帮我们获取字母.数字.特殊符号. import string #打印所有的小写字母 print(string.ascii_lowercase) #打印所 ...

  10. python常用模块-调用系统命令模块(subprocess)

    python常用模块-调用系统命令模块(subprocess) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. subproces基本上就是为了取代os.system和os.spaw ...

随机推荐

  1. 再谈树形dp

    上次说了说树形dp的入门 那么这次该来一点有难度的题目了: UVA10859 Placing Lampposts 给定一个n个点m条边的无向无环图,在尽量少的节点上放灯,使得所有边都与灯相邻(被灯照亮 ...

  2. Nginx详解二十九:基于Nginx的中间件架构设计

    基于Nginx的中间件架构 一:了解需求 1.定义Nginx在服务体系中的角色 1.静态资源服务 2.代理服务 3.动静分离 2.静态资源服务的功能设计 3.代理服务 二:设计评估 三:配置注意事项

  3. Android 中的缓存

    AsimpleCache 1.它可以缓存什么东西? 普通的字符串. json. 序列化的java对象 字节数字. 2.主要特色 1:轻,轻到只有一个JAVA文件.  2:可配置,可以配置缓存路径,缓存 ...

  4. ffmpeg切割视频

    using System.Diagnostics; public static void carveVideo() { var inputpath = @"d:\1.mp4"; v ...

  5. Python面向对象 三大特性 综合案例

    class Animal: # 所用的知识 Animal类的封装 -> Dog类,Cat类,Person类的继承->多态 # 把所有的共同属性和方法封装在一个公有类里面让子类继承父类的方法 ...

  6. sqoop无法导出parquet文件到mysql

    1.问题描述 在CDH集群中我们需要将Hive表的数据导入到RDBMS数据库中,使用Sqoop工具可以方便的将Hive表数据抽取到RDBMS数据库中,在使用Sqoop抽取Hive Parquet表时作 ...

  7. Python自定义-分页器

    Python自定义-分页器 分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该在数据库表中的起始位置. 1.设定每页显示数据条数 2.用户输入页码(第一页.第二页...) 3 ...

  8. 使用layer弹出Ueditor实现父子传值

    Layear的代码:     function tankuang() {        layer.open({            type: 2,            title: false ...

  9. 435. Non-overlapping Intervals

    Given a collection of intervals, find the minimum number of intervals you need to remove to make the ...

  10. 一脸懵逼学习基于CentOs的Hadoop集群安装与配置(三台机器跑集群)

    1:Hadoop分布式计算平台是由Apache软件基金会开发的一个开源分布式计算平台.以Hadoop分布式文件系统(HDFS)和MapReduce(Google MapReduce的开源实现)为核心的 ...