python 正则匹配
在python 中,正则匹配用到的还是挺多的,下面总结一下常用的一些正则匹配:
精确匹配:
\d
可以匹配一个数字,
\w
可以匹配一个字母或数字,
. 匹配任意的单个字符
\s
可以匹配一个空格(也包括Tab等空白符)
变长匹配:
{N} 重复前面的单个字符N次出现
{a,b} 重复前面的单个字符出现次数的范围在a-b次,例如:\d{3,8} 表示任意个字符(包括0个)
* 表示任意个字符(包括0个)
+ 至少有一个,即一个或多个
[ ] 方括号中的内容是以拆分为单个的形式,只要方括号中的出现任意一个就会匹配上
A|B
可以匹配A或B,所以(P|p)ython
可以匹配'Python'
或者'python'
^
表示行的开头,^\d
表示必须以数字开头。
$
表示行的结束,\d$
表示必须以数字结束。
py
也可以匹配'python'
,但是加上^py$
就变成了整行匹配,就只能匹配'py'
了。
准备知识完成,在python中的正则匹配的使用模块主要是re模块:
在使用python的re模块,导包:
import re
在编写某些正则的时候,有时候需要转义,为了我们可以在编写正则匹配体的时候,加前缀 r 就不用考虑转义的问题了:
a="^py\\001&"b=r"^py\001&"
#都是表示匹配'^py\001&'
正则表达式修饰符 - 可选标志
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:
修饰符 | 描述 |
---|---|
re.I | 使匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
re模块用法:
match()
方法判断是否匹配,如果匹配成功,返回一个Match
对象,否则返回None
。常见的判断方法就是:
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none
匹配成功re.match方法返回一个匹配的对象,否则返回None。
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
test = '用户输入的字符串'
if re.match(r'正则表达式', test):print('ok')
else:print('failed')
re.search方法
re.search 扫描整个字符串并返回第一个成功的匹配。
函数语法:
re.search(pattern, string, flags=0)
匹配成功re.search方法返回一个匹配的对象,否则返回None。
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式
re.match与re.search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
检索和替换
Python 的 re 模块提供了re.sub用于替换字符串中的匹配项,返回替换后的字符串。
语法:
re.sub(pattern, repl, string, count=0, flags=0)
参数:
- pattern : 正则中的模式字符串。
- repl : 替换的字符串,也可为一个函数。
- string : 要被查找替换的原始字符串。
- count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配
分组
除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用()
表示的就是要提取的分组(Group)。比如:
^(\d{3})-(\d{3,8})$
分别定义了两个组,可以直接从匹配的字符串中提取出区号和本地号码:
>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
>>> m
<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
>>> m.group(0)
'010-12345'
>>> m.group(1)
'010'
>>> m.group(2)
'12345'
group(0)
永远是原始字符串,group(1)
、group(2)
……表示第1、2、……个子串
贪婪匹配
最后需要特别指出的是,正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。举例如下,匹配出数字后面的0
:
>>> re.match(r'^(\d+)(0*)$', '102300').groups()
('102300', '')
由于\d+
采用贪婪匹配,直接把后面的0
全部匹配了,结果0*
只能匹配空字符串了。
必须让\d+
采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0
匹配出来,加个?
就可以让\d+
采用非贪婪匹配:
>>> re.match(r'^(\d+?)(0*)$', '102300').groups()
('1023', '00')
python 正则匹配相关推荐
- python正则匹配表达式(2)
上节主要讲解python正则匹配的匹配表达式,而需要调用相应的API才能解决如何匹配的问题. 在python官方文档Regular Expression HOWTO给出了python匹配函数,官方给出 ...
- 使用Python 正则匹配两个特定字符之间的字符方法
string = "<KeysViewHDF5 ['Inoisy']>" import redef cut_out(a,b,string):result = re.fi ...
- Python正则匹配 去除文本中的各类emoji表情符号
我们的文本数据中经常会带有很多表情,如何完整地清除得到高质量的文本供我们利用呢? p = re.compile(u'['u'\U0001F300-\U0001F64F' u'\U0001F680-\U ...
- python正则匹配ABAC型词语
python正则匹配ABAC型词语 前言 代码 前言 本人第一次写博客,欢迎指出不足. 代码 今天做python作业,发现很多文章不能很好地解决匹配ABAC型的词语,例如: patten =r'((. ...
- python正则匹配txt特定字符串(有换行)
python正则匹配txt特定字符串(有换行) 在原txt文件中,我们需要匹配出的字符串为:休闲服务(中间参杂着换行) 直接复制到notebook里进行处理 完整代码 在原txt文件中,我们需要匹配出 ...
- python正则匹配汉字
python正则匹配汉字的规则为:[\u4e00-\u9fa5] 后面可以加一个+,匹配多个汉字. 例子如下: print(re.findall(r'[\u4e00-\u9fa5]+', '这是测试用 ...
- python正则表达式匹配数字或者逗号_python正则表达式去掉数字中的逗号(python正则匹配逗号)...
分析 数字中经常是3个数字一组,之后跟一个逗号,因此规律为:***,***,*** 正则式[a-z]+,[a-z]? import re sen = "abc,123,456,789,mnp ...
- Python 正则匹配(re)组的应用
昨天刚看完re的一小部分,今天刚好有个任务需要用到正则. 需求是:一张表的text字段存了很多内容.里面包括发给用户的邮件内容,已经用户的邮箱等等.现在需要查找出发送给哪些email以及多少封邮件.需 ...
- python正则匹配ip地址_Python正则表达式匹配和提取IP地址
Linux No.1 IPv4 下面是IPv4的IP正则匹配实例: 简单的匹配给定的字符串是否是ip地址 import re if re.match(r"^(?:[0-9]{1,3}.){3 ...
- python正则匹配表达式(1)
python也和其他语言一样也提供了丰富的正则匹配表达式,在爬虫中解析服务器的内容时也经常需要用到,python的正则匹配为re库,其官方文档链接为: Lib/re.py 在官方文档中特别说明正则匹配 ...
最新文章
- React-Native中的flexbox布局的使用
- bzoj5368 [Pkusc2018]真实排名
- Go的io/ioutil
- 用计算机探索 按一定规律排列,探索规律练习题1
- 二、Web服务器——ServletHTTPRequest笔记
- android金币动效_Android 仿余额宝数字跳动动画效果完整代码
- 利用ASP.NET MVC源代码调试你的应用程序
- 数据结构笔记(三)-- 链式实现顺序表
- 【正在完善】高级CSS特效解析其示范案例
- 小学生c语言入门教程,啊哈C语言(小学生坐在马桶上都能看懂C语言入门教程).pdf...
- ABTest之最常见的八个错误
- 开学至此时总结。(月末总结好像一直没写)
- linux开启PREEMPT_RT
- Maven中dependencyManagement标签的作用
- 编写微信聊天机器人2《聊天精灵WeChatGenius》:引入Xposed库,使模块生效。
- 破解手持机Socket通讯协议手记之一
- 网站使用手机相机_使用“互通相机”把你的iPhone手机变成Mac的心灵之窗!
- 读懂 SSD – 什么是顺序读写、随机读写、4K读写、IOPS值?
- 软件定义和硬件重构知多少(二)
- 【Mac】动图截图工具Kap
热门文章
- 【备战美赛】蒙特卡洛算法
- python方差的计算公式_使用Python计算方差协方差相关系数
- 深度学习:NiN(Network In Network)详细讲解与代码实现
- 主机PING虚拟机通,TELNET端口不通是什么原因?(除了22等端口)
- 高性能网络通信框架--Mercury
- 职场上同事不会给你说的10个潜规则!
- HTML练习css--制作开心餐厅介绍页面
- ios--融云即时通讯
- 简单工厂模式和工厂方法模式
- liunx php7.0 mysql_Centos7.0以上安装nginx+php7.0+mysql5.7+redis3作为开发php环境