python正则-re的使用
今天在刷题的时候用到了正则,用的过程中就感觉有点不太熟练了,很久没有用正则都有点忘了。所以现在呢,我们就一起来review一下python中正则模块re的用法吧。
今天是review,所以一些基础的概念就不做介绍了,先来看正则中的修饰符以及它的功能:
修饰符
- re.I 使匹配对大小写不敏感
- re.L 做本地化识别匹配
- re.M 多行匹配,影响^和$
- re.S 使.匹配包括换行在内的所有字符
- re.U 根据Unicode字符集解析字符.这个标志影响\w \W \b \B
- re.X 该标志通过给予你更灵活的格式以便你将正则表达式写的更易于理解.
模式
- ^ 匹配字符串开头
- $ 匹配字符串结尾
- . 匹配人以字符,除了换行符号.当re.DOTAALL标记被指定时,则可以匹配包括换行符的任意字符.
- [...] 用来表示一组字符,单独列出:[amk]匹配a,m或k
- [^...] 不在[]中的字符:[^amk]匹配除amk之外的字符
- re* 匹配0个或多个的表达式
- re+ 匹配1个或多个的表达式
- re? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式.
- re{n} 精准匹配n个前面表达式
- re{n,} 匹配大于等于n个前面表达式
- re{n,m} 匹配n到m个前面的表达式定义的片段,贪婪方式
- a|b 匹配a或b
- (re) 对正则表达式分组,并记住匹配的文本
- (?imx) 正则表达式包含三种可选标志,imx,只影响括号中的区域.
- (?-imx) 正则表达式关闭imx可选标志,只影响括号中的区域.
- (?:re) 类似(...)但不表示一个组
- (?imx:re) 在括号中使用imx可选标志
- (?-imx:re) 在括号中不是用imx可选标志
- (?#...) 注释
- (?=re) 前向肯定界定符.如果所含正则表达式,以...表示,在当前位置成功匹配时成功,否则失败.但一旦所含表达式已经尝试,匹配引擎根本没有提高,模式的剩余部分还要尝试界定符右边.
- (?!re) 前向否定界定符.与肯定界定符相反;当所含的表达式不能在字符串当前位置匹配成功时成功.
- (?>re) 匹配的独立模式,省去回朔.
- \w 匹配字符数字以及下划线
- \W 匹配非字母数字下划线
- \s 匹配任意空白字符,等价于[\t\n\r\f]
- \S 匹配任意非空白字符
- \d 匹配任意数字
- \D 匹配任意非数字
- \A 匹配字符串开始
- \Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串.
- \z 匹配字符串结束
- \G 匹配最后匹配完成的位置
- \b 匹配一个单词边界,也就是指单词和空格之间的位置
- \B 匹配非单词边界
- \n \t 匹配一个换行符,一个制表符
- \1...\9 匹配第n个分组的内容
上面这些呢,是我们会用到的一些模式,这里面绝大部分都是应该熟记于心的。
接下来我们看re的一些方法:
re.compile
这个方法会生成一个正则对象,他的第一个参数是正则字符串,第二个参数是修饰符,就是 re.I, re.S 这些。
生成的这个正则对象呢,它还有一些方法,比如match、findall、finditer、search等等,这些方法的用法请往下看。
re.match
match方法是从给定字符串的开头开始进行匹配,并且只匹配一次。也就是说如果字符串和正则的第一个字母就对不上那就匹配失败了。
ta的参数是pettern,string,flags
pettern 就是正则字符串,如果是通过re.compile方法生成的正则对象.match来调用的话,就不需要这个参数了,因为正则对象本身就代表了一个正则匹配模式。
string 就是要进行匹配的目标字符串
flags 就是正则的修饰符,比如 re.I
match 如果匹配失败返回None,匹配惩罚返回的则是一个match对象。
match对象有一些方法,比较常用的有:span、group、groups等等
- span 方法返回的一个二元组,分别表示匹配字符串在目标字符串中的起始下标和结束下标
- group 函数有一个int类型的参数,参数为0表示返回正则匹配的字符串,参数为1返回正则中第一个组匹配的内容,2返回第二组的内容一次类推
- groups 函数是所有group函数结果组成一个元组。
re.search
search 函数和 match 函数是类似的,区别在于match方法是只在目标函数开头匹配一次;search函数是在整个目标函数上匹配一次,一次匹配成功后不再进行匹配。
同样search方法返回的也是一个match对象,用法和match方法返回的结果一样。
re.split
split 函数是用来分割字符串的一个函数。它的功能就是根据匹配的字符串对目标字符串进行分割,返回的结果是一个列表。
需要注意的是,如果正则中有组,组内的字符在结果列表中也会保留,不是组内的字符在结果列表中不会被保留。什么意思呢?通过一个例子来看一下:
st = 'www.baidu.com www.taobao.com'
result = re.split('bai(du)', st)
print(result)
结果:['www.', 'du', '.com www.taobao.com']
可以看到,字符串‘du’是被括号括起来的,所以在结果中也有'du'这个元素,而'bai'没有被括号括起来,在结果中就不会有‘bai’这个元素。
re.findall
这个函数是我在爬虫项目中用的最多的一个函数了,它可以把所有匹配的结果以列表的形式返回,而不是像match和search一样只匹配一个结果。我们来试一下:
st = 'www.baidu.com www.taobao.com'
result = re.findall(r'www\.(\w*)\.(com)', st)
print(result)
[('baidu', 'com'), ('taobao', 'com')]
re.finditer
这个函数和findall的功能一样。不同之处在于这个函数返回的结果是一个生成器,而生成器中的每一项是一个match对象,我们一起来看一下:
st = 'www.baidu.com www.taobao.com'
result = re.finditer(r'www\.(\w*)\.(com)', st)
print(result.__next__().group(0, 1, 2))
print(next(result).groups(2))
('www.baidu.com', 'baidu', 'com')
('taobao', 'com')
re.sub
这个函数是用来替换字符串的。可以将匹配的字符串替换成指定的字符串,我们来看一下:
st = 'www.111.com www.222.com'
result = re.sub(r'\d+', 'OK', st)
print(result)
结果:www.OK.com www.OK.com
我们的第二个参数除了可以是一个给定的字符串还可以是一个函数:
def toOK(matched):
value = matched.group()
return str(int(value)*2)
st = 'www.111.com www.222.com'
result = re.sub(r'\d+', toOK, st)
print(result)
结果:www.222.com www.444.com
好,我们今天的review就到这里了,你掌握了吗?对于正则你还知道哪些更高级的用法呢,留言告诉我吧。
python正则-re的使用的更多相关文章
- Python正则式的基本用法
Python正则式的基本用法 1.1基本规则 1.2重复 1.2.1最小匹配与精确匹配 1.3前向界定与后向界定 1.4组的基本知识 2.re模块的基本函数 2.1使用compile加速 2.2 ma ...
- python 正则,常用正则表达式大全
Nginx访问日志匹配 re.compile #re.compile 规则解释,改规则必须从前面开始匹配一个一个写到后面,前面一个修改后面全部错误.特殊标准结束为符号为空或者双引号: 改符号开始 从 ...
- python 正则使用笔记
python正则使用笔记 def remove_br(content): """去除两边换行符""" content = content.r ...
- Python正则处理多行日志一例
正则表达式基础知识请参阅<正则表达式基础知识>,本文使用正则表达式来匹配多行日志并从中解析出相应的信息. 假设现在有这样的SQL日志: SELECT * FROM open_app WHE ...
- Python正则匹配字母大小写不敏感在读xml中的应用
需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配? 问题出现之前是使用字符串比较的方式,比如要匹配'abc',则用语句: if s == 'abc':#s为需要匹配的字符串 prin ...
- Python正则替换字符串函数re.sub用法示例(1)
本文实例讲述了Python正则替换字符串函数re.sub用法.分享给大家供大家参考,具体如下: python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串然后把它替 ...
- Python正则处理多行日志一例(可配置化)
正则表达式基础知识请参阅<正则表达式基础知识>,本文使用正则表达式来匹配多行日志并从中解析出相应的信息. 假设现在有这样的SQL日志: SELECT * FROM open_app WHE ...
- 认识python正则模块re
python正则模块re python中re中内置匹配.搜索.替换方法见博客---python附录-re.py模块源码(含re官方文档链接) 正则的应用是处理一些字符串,phthon的博文python ...
- python正则的中文处理(转)
匹配中文时,正则表达式规则和目标字串的编码格式必须相同 print sys.getdefaultencoding() text =u"#who#helloworld#a中文x#" ...
- Python正则简单实例分析
Python正则简单实例分析 本文实例讲述了Python正则简单用法.分享给大家供大家参考,具体如下: 悄悄打入公司内部UED的一个Python爱好者小众群,前两天一位牛人发了条消息: 小的测试题: ...
随机推荐
- Zookeeper详解-应用程序(七)
Zookeeper为分布式环境提供灵活的协调基础架构.ZooKeeper框架支持许多当今最好的工业应用程序.我们将在本章中讨论ZooKeeper的一些最显着的应用. 雅虎 ZooKeeper框架最初是 ...
- Java多线程同步工具类之CyclicBarrier
一.CyclicBarrier使用 CyclicBarrier从字面上可以直接理解为线程运行的屏障,它可以让一组线程执行到一个共同的屏障点时被阻塞,直到最后一个线程执行到指定位置,你设置的执行线程就会 ...
- MySQL之SQL优化详解(三)
目录 MySQL 之SQL优化详解(三) 1. 索引优化 2. 剖析报告:Show Profile MySQL 之SQL优化详解(三) 1. 索引优化 一旦建立索引,select 查询语句的where ...
- 常用的HTTP状态代码(4xx、5xx)详解
HTTP状态代码常用的如下: 400 无法解析此请求. 401.1 未经授权:访问由于凭据无效被拒绝. 401.2 未经授权: 访问由于服务器配置倾向使用替代身份验证方法而被拒绝. 401.3 未经授 ...
- [代码修订版] Python 踩坑之旅进程篇其五打不开的文件
目录 1.1 踩坑案例 1.2 填坑和分析 1.2.1 从程序优化入手 1.2.2 从资源软硬限入手 1.4.1 技术关键字 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: ...
- spring源码深度解析— IOC 之 默认标签解析(上)
概述 接前两篇文章 spring源码深度解析—Spring的整体架构和环境搭建 和 spring源码深度解析— IOC 之 容器的基本实现 本文主要研究Spring标签的解析,Spring的标签 ...
- Solr配置文件 schema.xml
1 添加自己的分词器(mmseg4j) 意思是textCommplex 这个类型,用的是 com.chenlb.mmseg4j.solr.MMSegTokenizerFactory 这个分词器,词库是 ...
- 恢复云数据库MySQL的备份文件到自建数据库遇到的报错
报错信息 : 恢复云数据库MySQL的备份文件到自建数据库,自建数据库版本5.6.36. 按照阿里云文档操作,启动数据库报错 -- :: [ERROR] /application/mysql/bin/ ...
- RT-Thread的CPU占用率查看
今天看到朋友的博客,他在描述RT-Thread钩子函数时,简单提了下RT-Thread中CPU占用,没有具体描述,所以我在这里做下补充. RT-Thread查看CPU使用率时,我知道的有这种方法. 大 ...
- C++模版的用法
模板是实现代码重用机制的一种工具,实质就是实现类型参数化,即把类型定义为参数. C++提供两种模板:函数模板,类模板 函数模板 template <typename T> T myMax( ...