Python常用模块--re
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的更多相关文章
- Python常用模块之sys
Python常用模块之sys sys模块提供了一系列有关Python运行环境的变量和函数. 常见用法 sys.argv 可以用sys.argv获取当前正在执行的命令行参数的参数列表(list). 变量 ...
- Python常用模块中常用内置函数的具体介绍
Python作为计算机语言中常用的语言,它具有十分强大的功能,但是你知道Python常用模块I的内置模块中常用内置函数都包括哪些具体的函数吗?以下的文章就是对Python常用模块I的内置模块的常用内置 ...
- python——常用模块2
python--常用模块2 1 logging模块 1.1 函数式简单配置 import logging logging.debug("debug message") loggin ...
- python——常用模块
python--常用模块 1 什么是模块: 模块就是py文件 2 import time #导入时间模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的 ...
- Python常用模块——目录
Python常用模块学习 Python模块和包 Python常用模块time & datetime &random 模块 Python常用模块os & sys & sh ...
- python 常用模块之random,os,sys 模块
python 常用模块random,os,sys 模块 python全栈开发OS模块,Random模块,sys模块 OS模块 os模块是与操作系统交互的一个接口,常见的函数以及用法见一下代码: #OS ...
- python常用模块之时间模块
python常用模块之时间模块 python全栈开发时间模块 上次的博客link:http://futuretechx.com/python-collections/ 接着上次的继续学习: 时间模块 ...
- python常用模块之subprocess
python常用模块之subprocess python2有个模块commands,执行命令的模块,在python3中已经废弃,使用subprocess模块来替代commands. 介绍一下:comm ...
- python常用模块之string
python常用模块string模块,该模块可以帮我们获取字母.数字.特殊符号. import string #打印所有的小写字母 print(string.ascii_lowercase) #打印所 ...
- python常用模块-调用系统命令模块(subprocess)
python常用模块-调用系统命令模块(subprocess) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. subproces基本上就是为了取代os.system和os.spaw ...
随机推荐
- Confluence 6 通过 SSL 或 HTTPS 运行
Atlassian 应用可以通过 HTTPS 进行访问,但是 Atlassian 并不提供有关访问的支持服务,同时 Atlassian 不能保证能够提供所有的支持. 如果你的 assistance 在 ...
- django模板导入外部js和css等文件
1.新建文件夹templates(存放模板文件),新建文件夹media(存放js.css.images文件夹),并把两个文件夹放到了项目的根目录下 2.设定模板路径 设置模板路径比较简单,只要在set ...
- Android开发实战一 百度SDK
一 申请百度API key 百度地图API:http://developer.baidu.com/map/ 百度地图开发者平台地址:http://developer.baidu.com/map/ .点 ...
- 《剑指offer》从尾到头打印链表
本题来自<剑指offer> 从尾到头打印链表 题目: 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 思路: 方案一:首先遍历到尾部,然后从尾部进行到头值进行操作,后进先 ...
- git使用diff----git-pull之后如何查看拉下来的文件有那些修改
git pull拉取 git pull对于拉下来的修改文件自动对其进行git add /rm 及git commit 操作.所以拉下来的文件有那些修改,查看的方式可把它们归结于上一次提交的比较. gi ...
- python项目实战三个小实例
1. 让用户输入圆的半径,告诉用户圆的面积: import math while True: # 用户输入 r = input("请输入圆的半径:") ...
- 激活函数的比较,sigmoid,tanh,relu
1. 什么是激活函数 如下图,在神经元中,输入inputs通过加权.求和后,还被作用了一个函数.这个函数就是激活函数Activation Function 2. 为什么要用激活函数 如果不用激活函数, ...
- 在CI框架中如何实现伪静态
第一步:在根目录下(index.PHP)同一级目录下建立一个.htaccess这个文件文件内容(即红色标识所显示的内容) URI 类 和 URL 辅助函数 包含了一些函数可以让你更容易的处理 URI ...
- 移动端:div在手机页面上随意拖动
<!doctype html> <html> <head> <title>弹窗</title> <meta charset=" ...
- [转]Prometheus 与 Grafana 实现服务器运行状态监控
http://flintx.me/2017/12/12/Prometheus%20+%20Grafana%20%E5%AE%9E%E7%8E%B0%E6%9C%8D%E5%8A%A1%E5%99%A8 ...