Python入门-正则表达式
正则匹配函数
# 需要先导入re模块
import re #字符串,匹配查找
info = "www baidu com"
print("=======字符串自带find方法查找============")
print(info.find("baidu"))
print(info.find("www"))
print("=======re.match方法从头查找==============")
print("从头匹配OK:", re.match("www", info)) # 匹配成功返回match类对象
print("获取从头匹配OK结果:", str(re.match("www", info).span())) # span获取位置
print("从头不匹配:", re.match("baidu", info)) #不匹配返回None
print("忽略大小写:", re.match("www","WWW.BAIDU.COM", re.IGNORECASE))
print("=======re.search任意位置查找==============")
print("search匹配:",re.search("www",info))
print("search匹配:",re.search("baidu",info))
print("search忽略大小写:", re.search("www","WWW.BAIDU.COM", re.IGNORECASE)) print("=======re.findall全局查找==============")
print("findall匹配:",re.findall("www",info))
print("findall匹配:",re.findall("baidu",info))
print("findall忽略大小写:", re.findall("www","WWW.BAIDU.COM", re.IGNORECASE)) """
=======字符串自带find方法查找=============
5
0
=======re.match方法从头查找==============
从头匹配OK: <re.Match object; span=(0, 3), match='www'>
获取从头匹配OK结果: (0, 3)
从头不匹配: None
忽略大小写: <re.Match object; span=(0, 3), match='WWW'>
=======re.search任意位置查找==============
search匹配: <re.Match object; span=(0, 3), match='www'>
search匹配: <re.Match object; span=(5, 10), match='baidu'>
search忽略大小写: <re.Match object; span=(0, 3), match='WWW'>
=======re.findall全局查找================
findall匹配: ['www']
findall匹配: ['baidu']
findall忽略大小写: ['WWW']
"""
匹配符号范围
import re info = "www.baidu.com.17745674567.127.o.0.1.hello.heLLo.heLlo"
print("原始字符串:",info)
print("==========范围内匹配==========")
mark1 = "he[lkn][lkn]o"
mark2 = "he[a-z][a-z]o"
mark3 = "he[a-zA-Z][a-zA-Z]o" print("匹配[lkn]范围字符:",re.findall(mark1, info, re.I))
print("匹配[a-z]范围字符:",re.findall(mark2, info, re.I))
print("匹配[a-zA-Z]范围字符:",re.findall(mark3, info, re.I))
print("匹配[0-9]范围字符:",re.findall("[0-9]", info, re.I))
print("匹配[^0-9a-t]范围取反匹配:",re.findall("[^0-9a-t]", info, re.I))
"""
原始字符串: www.baidu.com.17745674567.127.o.0.1.hello.heLLo.heLlo
==========范围内匹配==========
匹配[lkn]范围字符: ['hello', 'heLLo', 'heLlo']
匹配[a-z]范围字符: ['hello', 'heLLo', 'heLlo']
匹配[a-zA-Z]范围字符: ['hello', 'heLLo', 'heLlo']
匹配[0-9]范围字符: ['1', '7', '7', '4', '5', '6', '7', '4', '5', '6', '7', '1', '2', '7', '0', '1']
匹配[^0-9a-t]范围取反匹配: ['w', 'w', 'w', '.', 'u', '.', '.', '.', '.', '.', '.', '.', '.', '.']
"""
边界数量匹配
import re #有边界符号,表示单边位置
#如没有边界符号,表示任意全局匹配
str = "food hello Food"
pat = "fo[ol][dlk]$"
print("============开始结束匹配==============")
pat22 = "^fo[ol][dlk]"
pat33 = "fo[ol][dlk]"
print("匹配开头:", re.findall(pat, str, re.I))
print("匹配结尾:", re.findall(pat22, str, re.I))
print("匹配不限开头结尾:", re.findall(pat33, str, re.I))
print("============多位简写匹配==============")
input_data = "2020-09-09"
mark = "[0-9]{4}-[0-9]{2}-[0-9]{2}" # 使用{}进行多次匹配
print("生日格式匹配为:", re.match(mark, input_data, re.I))
print("============拆分匹配==============")
info = "hjdfkj3243423.4324324kjkl343435353adf"
mark2 = r"\d+" #加R表示,这是正则匹配,不加理论上也可以
print(re.split(mark2, info))
score = "119.9"
mark3 = r"^[+-]?\d+(\.\d+)?$"
print(re.match(mark3, score, re.I))
print("============逻辑匹配==============")
tel = "(010)-12343234"
"""
7-8位数字:'\d{7,8}'
前三位区号:\d{3,4}
区号+括号:(\d{3,4})
"""
mark4 = r"((\d{3,4})|(\(\d{3,4}\)-))?\d{7,8}"
print(re.match(mark4, tel))
"""
============开始结束匹配==============
匹配开头: ['Food']
匹配结尾: ['food']
匹配不限开头结尾: ['food', 'Food']
============多位简写匹配==============
生日格式匹配为: <re.Match object; span=(0, 10), match='2020-09-09'>
============拆分匹配==============
['hjdfkj', '.', 'kjkl', 'adf']
<re.Match object; span=(0, 5), match='119.9'>
============逻辑匹配==============
<re.Match object; span=(0, 14), match='(010)-12343234'>
"""
正则匹配模式
#正则匹配模式
import re data = """
food is very good
food is very good
food is very good
"""
mark = "fo{2}d"
mark2 = ".+"
print("多行匹配以及忽略大小写:",re.findall(mark, data, re.I | re.M)) #多行匹配以及忽略大小写
print("默认匹配,不加其他后缀:",re.findall(mark2, data)) #多行匹配以及忽略大小写
print("修改.匹配任意模式,可匹配换行等任意字符:",re.findall(mark2, data, re.S)) #多行匹配以及忽略大小写
print("忽略空白和注释,进行匹配:",re.findall(mark2, data, re.X)) #多行匹配以及忽略大小写 """
多行匹配以及忽略大小写: ['food', 'food', 'food']
默认匹配,不加其他后缀: [' ', 'food is very good', 'food is very good', 'food is very good ']
修改.匹配任意模式,可匹配换行等任意字符: [' \nfood is very good\nfood is very good\nfood is very good \n']
忽略空白和注释,进行匹配: [' ', 'food is very good', 'food is very good', 'food is very good ']
"""
分组
#获取数据后,需要再拆分,可以使用分组
import re info = "id:root, phone:11012341234, bir:2021-09-08"
mark = r"(\d{4})-(\d{2})-(\d{2})"
res = re.search(mark, info)
print("获取分组数据为 :", res.group())
print("获取第1组数据为:", res.group(1))
print("获取第2组数据为:", res.group(2))
print("获取第3组数据为:", res.group(3))
mark2 = r"\d{4}-\d{2}-\d{2}"
res2 = re.search(mark2, info)
print("不加分组括号为 :",res2.group()) """
获取分组数据为 : 2021-09-08
获取第1组数据为: 2021
获取第2组数据为: 09
获取第3组数据为: 08
不加分组括号为 : 2021-09-08
"""
环视
# 通过获取指定字符串位置,然后达到匹配目的字符 import re
info = "id:root,name:tom,age:33,id:root"
mark = r"(?<=id:)(?P<name>\w+)"
print(re.findall(mark, info)) """
['root', 'root']
"""
Python入门-正则表达式的更多相关文章
- Python 入门学习(贰)文件/文件夹正则表达式批量重命名工具
基于 Udacity 的 Python 入门课程 Programming Foundations with Python 基于 Python 2.7 思路 Project 2 是一个去除文件名中所有数 ...
- Python入门之树莓派
Linux命令行$+命令 pwd显示当前目录 ls列表 cd改变当前目录,/ sudo超级用户输入,特权来操作系统相关设置或删除文件 sudo apt-get install 安装程序 sudo ...
- 老鸟的Python入门教程
转自老鸟的Python入门教程 重要说明 这不是给编程新手准备的教程,如果您入行编程不久,或者还没有使用过1到2门编程语言,请移步!这是有一定编程经验的人准备的.最好是熟知Java或C,懂得命令行,S ...
- Python入门教程(1)
人生苦短,我用Python! Python(英语发音:/ˈpaɪθən/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于19 ...
- Python语言学习之Python入门到进阶
人们常说Python语言简单,编写简单程序时好像也确实如此.但实际上Python绝不简单,它也是一种很复杂的语言,其功能特征非常丰富,能支持多种编程风格,在几乎所有方面都能深度定制.要想用好Pytho ...
- Python 入门网络爬虫之精华版
Python 入门网络爬虫之精华版 转载 宁哥的小站,总结的不错 Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下. 首先列举 ...
- python之正则表达式【转】
首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计 ...
- Python 入门之 内置模块 -- re模块
Python 入门之 内置模块 -- re模块 1.re 模块 (1)什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类 ...
- Python入门到进阶必看的权威书籍与网站
随着人工智能全面爆发,Python[英文单词:蟒蛇],是一款近年来爆红的计算机编程语言.1989年发明,1991年发行,比目前应用最广的Java还要大7岁,有种大器晚成的感觉. 分享之前我还是要推荐下 ...
随机推荐
- php 23种设计模型 - 策略模式
介绍 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换,用户还不需要知道其具体的实现 主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护. 何时使 ...
- 【译】.NET 6 网络改进
原文 | Máňa Píchová 翻译 | 郑子铭 对于 .NET 的每个新版本,我们都希望发布一篇博客文章,重点介绍网络的一些变化和改进.在这篇文章中,我很高兴谈论 .NET 6 中的变化. 这篇 ...
- Casbin入选2022 Google编程之夏
Casbin入选2022 Google编程之夏! Google编程之夏(Google Summer of Code,GSoC),是由Google公司所主办的年度开源程序设计项目,第一届从2005年开始 ...
- python的matplotlib.pyplot绘制甘特图
博主本来就想简单地找一下代码,画一幅甘特图,结果百度之后发现甘特图的代码基本都不是用matplotlib库,但是像柱状图等统计图通常都是用这个库进行绘制的,所以博主就花了一些时间,自己敲了一份代码,简 ...
- CSI 工作原理与JuiceFS CSI Driver 的架构设计详解
容器存储接口(Container Storage Interface)简称 CSI,CSI 建立了行业标准接口的规范,借助 CSI 容器编排系统(CO)可以将任意存储系统暴露给自己的容器工作负载.Ju ...
- Docker——常用命令
常用命令 docker version # 显示docker的版本信息 docker info # 显示docker的系统信息,包括镜像和容器的数量 docker 命令 --help # 帮助命令,中 ...
- wms、wmts、wfs等地图服务区别
OGC OGC 全称是开放地理空间信息联盟(Open Geospatial Consortium),是一个非盈利的国际标准组织,它制定了数据和服务的一系列标准,GIS厂商按照这个标准进行开发可 ...
- XSS 32个触发事件
标签: 1.onmouseenter:当鼠标进入选区执行代码 <div style="background-color:red" onmouseenter="ale ...
- php的魔术函数和魔术常量
0x00 魔术函数 1. __construct() 实例化对象时被调用, 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用. 2. __des ...
- CVE-2017-8759 微软word漏洞复现以及利用
CVE-2017-8759 微软word漏洞复现以及利用 0x00 漏洞描述 近日,360集团核心安全事业部分析团队发现一个新型的Office文档高级威胁攻击,攻击使用了9月12日补丁刚修复的.NET ...