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. Confluence 6 启用远程 API

    XML-RPC 和 SOAP 远程 API 从 Confluence 5.5 开始已经废弃了.我们推荐你使用完全支持的Confluence Server REST API. 希望启用 XML-RPC ...

  2. Confluence 6 查看系统信息

    系统信息界面提供了有关 Confluence 的配置信息和 Confluence 部署的环境信息. 希望对你的系统信息进行查看: 在屏幕的右上角单击 控制台按钮 ,然后选择 General Confi ...

  3. Confluence 6 SQL Server 测试你的数据库连接

    在你的数据库设置界面,有一个 测试连接(Test connection)按钮可以检查: Confluence 可以连接你的数据库服务器 数据库字符集和隔离级别是正确的 你的数据库用户有正确的数据库权限 ...

  4. webpack2配置备份

    package.json: { "name": "leyi", "version": "1.0.0", "ma ...

  5. 使用 declare 语句和strict_types 声明来启用严格模式:

    使用 declare 语句和strict_types 声明来启用严格模式: Caution: 启用严格模式同时也会影响返回值类型声明. Note: 严格类型适用于在启用严格模式的文件内的函数调用,而不 ...

  6. python:字符串转换成字节的三种方式及字符转码问题

    str='zifuchuang' 第一种 b'zifuchuang'第二种bytes('zifuchuang',encoding='utf-8')第三种('zifuchuang').encode('u ...

  7. [SDOI2018]荣誉称号

    题解: 并不需要什么算法 首先我们随便画一画就会发现 能画出一颗满二叉树 然后要满足每个点从上往下的路径和都相同(%m意义下) 一个点上可能对应了多个点 然后这样我们可以暴力dp $2^k*m^2+n ...

  8. 【转】利用 selenium 的 webdrive 驱动 headless chrome

    1.参考 使用 headless chrome进行测试 2.概念 Headless模式解决了什么问题: 自动化工具例如 selenium 利用有头浏览器进行测试,面临效率和稳定性的影响,所以出现了 H ...

  9. 有关centos7 图形化root用户登录

    好久不用的虚拟机开机后,是图形化登录界面,原来是命令行界面,后来安装和图形化 结果使用我记录的root密码死活登录不了,心想是不是时间久了忘记了root密码 然后开始尝试各种单用户修改root密码,再 ...

  10. makefile:n: *** missing separator. Stop

    makefile has a very stupid relation with tabs, all actions of every rule are identified by tabs .... ...