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. IOS 命令行工具开发

    例子  我们需要查看手机APP里面的某个应用的架构 新建一个Single View App 的ios项目 ToolCL 然后在 main函数中加入以下代码 // // main.m // ToolCL ...

  2. 【batch】批处理文件多参数处理和for循环字符串连接

    batch文件写起来,酸爽不谈了.[1]今天在github上发现个好东西batsh,运行地址:https://batsh.org/.[1] 这里需求的场景是:调用run.bat脚本并传入多个参数(相对 ...

  3. gnuradio 创建动态库 libftd3xx.so

    首先还是创建好模块gr-kcd cd gr-kcd 打开CMakeLists.txt cmake_minimum_required(VERSION 2.6) project(gr-kcd CXX C) ...

  4. kali 局域网嗅探

    1.局域网图片嗅探 工具  arpspoof arpspoof -i eth0 -t 192.1681.10(网卡 目标地址) 192.168.1.1 局域网网关,如果在Windows中可以使用局域网 ...

  5. Vuex状态管理模式的面试题及答案

    转载:点击查看原文 1.vuex有哪几种属性? 答:有五种,分别是 State. Getter.Mutation .Action. Module 2.vuex的State特性是? 答: 一.Vuex就 ...

  6. Python中的构造方法

    在Java等语言中都有构造方法[进行对象的创建及初始化]这个东东,示例代码如下: public class Student { //成员变量 private String name; private ...

  7. Java SimpleDateFormat 中英文时间格式化转换

    2015年08月29日 17:37:43 阅读数:32459 SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类.它允许进行格式化(日期 -> 文本).解析( ...

  8. RFC2119:RFC协议动词含义

    协议地址:http://www.ietf.org/rfc/rfc2119.txt MUST 必须的.通过它描述的对象,是强制要求的.它与REQUIRED和SHALL含义相同. MUST NOT 不允许 ...

  9. Python推荐系统库--Surprise理论

    Surprise Surprise是scikit系列中的一个.Surprise的User Guide有详细的解释和说明 支持多种推荐算法 基础算法/baseline algorithms 基于近邻方法 ...

  10. urls.py的配置[路由配置]

    urls.py的配置[路由配置] Get请求与Post请求的方式 get请求: (1)地址栏输入url (2)<a href="请求url">点击</a> ...