时间:2021-05-22
正则表达式是一个以简单直观的方式匹配指定文本信息从而达到查找、替换等操作的目的。正则表达式以其简单而高效的特点使得其在数据分析和数据验证方面应用广泛。
对于简单的正则表达式可以直接百度之,这里重点引荐下‘特殊'操作。
1.非贪婪模式 - {x,y}?
非贪婪模式是指在使用正则匹配时,尽可能少的匹配(默认是贪婪模式,即:尽可能多的匹配)。例:
>>> re.search(r'[\d]{2,5}?','091234568')
<_sre.SRE_Match object; span=(0, 2), match='09'>
在这里{2,5}?匹配只是匹配2-5个[\d]时只要满足2(最少的)个就好,在看看贪婪模式:
>>> re.search(r'[\d]{2,5}','091234568')
<_sre.SRE_Match object; span=(0, 5), match='09123'>
这时候,匹配2-5个[\d]时,默认匹配最多的5个。
注意:贪婪和非贪婪模式的区别就是重复操作符后有没有?字符
2.分组
正则表达式提供了一个机制将表达式分组,匹配的结果也将按照表达式单独分组。例:
>>> m = re.search(r'(\d{3})-(\d{5})','029-25642')>>> m.group()'029-25642'>>> m.groups()('029', '25642')>>> m.group(2)'25642'可以通过m.groups()看到分组匹配结果,通过m.group(index)查看具体编号的分组结果(编号从1开始,0是完整的匹配)。那分组有什么用呢,好像也没什么特殊的含义,不急,下面会用到。
3.引用分组(回溯) - \N
有这么一种情况,比如假设我要找出一个html文本中的所有<a></a>标签,怎么办?试试这样:
>>> re.search(r'<(\w+)>.+</(\w+)>','<a>this is a demo</e>')
<_sre.SRE_Match object; span=(0, 21), match='<a>this is a demo</e>'>
奇怪的事情来了,为什么<a></e>被匹配成功了,显然结果并不是想要的,那怎么才能只匹配<a></a>而过滤掉其他的呢(比如<a></e>)?答案就是引用分组,例:
>>> re.search(r'<(\w+)>.+</\1>','<a>this is a demo</e><p>demo two</p>')
<_sre.SRE_Match object; span=(21, 36), match='<p>demo two</p>'>
这里\1是关键,意思就是当前位置匹配的结果需要和第一个分组匹配的结果一致,或者说第一个分组的匹配结果期望在这里再次出现。以此类推。该方法最多只能匹配前99个分组。
4.分组命名 - (?P<name>.*)
分组命名最开始由python引入,比如Django路由中会用到。分组命名的好处是方便,直接使用名字比编号要简单而且不会变化,例:
>>> m = re.search(r'(?P<first_name>\d{3})-(?P<second_name>\d{4})','029-8967')>>> m.group('first_name')'029'>>> m.groupdict() {'first_name': '029', 'second_name': '8967'}当然,命名分组仍然是编号分组,依然可以使用编号进行查找分组。
5.先行断言 - X(?!Y)、X(?=Y)
假设有这么一种情况,要查找所有163信箱的文本,也就是@163.com结尾的所有email账号信息,也就是说不要@163.com这部分,但是其还要参与匹配。这就用到了先行断言,也即基于之后的内容是否存在接收或拒绝一个匹配,而不需要接下来的内容作为匹配的一部分。例:
>>> re.search(r'h(?!e)','hello home!')
<_sre.SRE_Match object; span=(6, 7), match='h'>
h(?!e)表示匹配h,而且h后面不能是e,此处匹配成功的是home,但是只返回h
>>> re.search(r'h(?=e)','hello home!')
<_sre.SRE_Match object; span=(0, 1), match='h'>
h(?=e)表示匹配he,此处匹配成功的是hello,但是只返回h
6.标记
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Python使用正则表达式过滤或替换HTML标签的方法。分享给大家供大家参考,具体如下:python正则表达式关键内容:python正则表达式转义
本文实例介绍了Python通过正则表达式获取,去除(过滤)或者替换HTML标签的几种方法,具体内容如下python正则表达式关键内容:python正则表达式转义
python根据正则表达式提取指定的内容正则表达式是极其强大的,利用正则表达式来提取想要的内容是很方便的事。下面演示了在python里,通过正则表达式来提取符合
正则表达式验证密码功能在项目中经常被使用到,但是很多朋友还是不大会使用密码正则表达式进行验证,本文小编为大家整理了php密码验证正则表达式、python密码强度
Regex类表示不可变(只读)的正则表达式。它还包含各种静态方法,允许在不显式创建其他类的实例的情况下使用其他正则表达式类。正则表达式基础概述什么是正则表达式在