本文主要是给大家介绍的是,Python中正则表达式如何实现重叠匹配的具体操作方法,给大家贴出了具体实例代码,希望能给各位读者带来一定的帮助。
import regex string = '100101010001' str_re = '101' print(regex.findall(str_re, string, overlapped=True))
普通的re库匹配,只能匹配一个’101’。
正则表达式可理解为对数据筛选的表达式,是有限个原子和元字符组成。
原子:基本组成单位,每个表达式至少有一个原子
普通字符组成原子 | |
---|---|
非打印字符组成原子 (不打印在输出台的字符) | \n:换行 \t:tab退格符 |
通用字符组成原子 | \w:匹配任意字母、数字、下划线 \W:与\w相反 \d:匹配任意十进制数 \D:与\d相反 \s:匹配任意空白字符,如空格、换行、缩进 \S:与\s相反 |
原子表组成原子 | 一组原子组成一个表,由[]声明 表内原子优先级相等,但内容只出现依次 若原子表以 ^ 开头,则表示取反 |
#普通字符组成原子 pat1 = "abcd" #非打印字符组成原子 pat2 = "\n" #通用字符做原子 pat3 = "\w" #原子表组成原子 pat4 = "py[abc]" #可以匹配pya,pyb,pyc,但匹配pyab等原子表重复出现的情况失败 #原子表开头带 ^ 表示取反 pat5 = "py[^abc]" #第三个位置匹配除了a,b,c外的任意一个字符
元字符:正则表达式中具有特殊含义的字符
. | 匹配任意字符,除了换行符 |
---|---|
^ | 匹配字符串开始的位置 |
$ | 匹配字符串结束的位置,当出现多组符合的匹配时,返回字符串最后的那组匹配 |
* | 匹配 0,1,n 次前面的原子【贪婪模式:尽可能多的匹配】 |
? | 匹配 0,1 次前面的原子【懒惰模式:精确匹配】 |
+ | 匹配 1,n 次前面的原子 |
{ j } | 前面的原子出现 j 次 |
{ j , } | 前面的原子至少出现 j 次 |
{ j , k } | 前面的原子至少出现 j 次,至多出现 k 次 |
i | j | 匹配 i 或 j ,若 i 与 j 同时出现,匹配 i |
( ) | 组,限制这组数据的组合如()内所描述一样,只返回符合括号内描述的内容 |
模式修正符
即函数中 flag 位置的参数,在不改变正则表达式的情况下改变其含义,调整匹配结果。
re.I | 匹配时忽略大小写 |
re.M | 多行匹配 |
re.L | 本地化识别匹配 |
re.U | 根据unicon字符匹配,影响\w \W |
re.S | 匹配包括换行符 |
正则表达式是对字符串进行模糊匹配,其中一个应用为正则匹配。正则匹配是python爬虫的一个使用技术,用于在爬取的文本信息中提取目标信息。
正则匹配常用的函数:(调用正则表达式模块re)
re.search(pat, str[, flag]):扫描字符串str,返回pat的位置(第一次成功匹配的),flag用于控制正则表达式的匹配方式
import re str = 'python' pat = 'pytho[a-n]' print(re.search(pat, str))
re.match(pat, str[, flag]):扫描字符串str开始的位置,返回pat的位置(第一次成功匹配的),flag用于控制正则表达式的匹配方式【若开始就不符合则结束,返回none】
import re str_1 = 'hello world' str_2 = 'world hello' pat = 'world' print(re.match(pat, str_1)) print(re.match(pat, str_2))
re.complie(pat[, flag]):
编译正则表达式pat,返回正则表达式对象
findall(str[, pos[, endpos]]):
匹配所有,用列表返回string中所有匹配到的子串【不止第一次】,pos和endpos可指定在string中的起始位置
re.complie(pat).findall(str):全局匹配函数,匹配str中所有符合pat的子串,装入一个列表返回结果
import re str = "hello world hello world hello world" pat = "hello" print(re.complie(pat).findall(str)) print(re.complie(pat).findall(str, 5, 15))
re.sub(pat, repl, str[, count[, flag]]):
替换字符串中的匹配项【清洗数据】,可用count指定最大替换次数
import re str = "400-823-823" pat = "-" #短横改空格,最大替换次数2 str_new = re.sub(pat, " ", str, count=2)
以上就是给大家的一些总结,希望可以为各位读者带来帮助,请大家继续关注读者哦。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/127594.html
摘要:数据规整化清理转换合并重塑数据聚合与分组运算数据规整化清理转换合并重塑合并数据集可根据一个或多个键将不同中的行链接起来。函数根据样本分位数对数据进行面元划分。字典或,给出待分组轴上的值与分组名之间的对应关系。 本篇内容为整理《利用Python进行数据分析》,博主使用代码为 Python3,部分内容和书本有出入。 在前几篇中我们介绍了 NumPy、pandas、matplotlib 三个...
摘要:下面实现日期格式的解析,要把传入的日期格式做匹配,然后从对象解析出对应的值,再拼到一块。 最近在翻看原来写的工具函数中,发现了formatDate这个工具函数,原来只是在使用,具体的实现原理没有仔细研究过,这次就来分析一下它的实现,了解一下正则表达式的一个实战应用。 函数功能 formatDate 函数接受两个参数,日期对象和格式参数,可以根据不同的格式参数将事件对象转换成日期格式,大...
摘要:正则表达式使用反斜杠来表示特殊形式,或者把特殊字符转义成普通字符。解决办法是对于正则表达式样式使用的原始字符串表示法在带有前缀的字符串字面值中,反斜杠不必做任何特殊处理。为了避免警告,需要将它们用反斜杠转义。 上一篇文章:Python标准库---18、文本处理服务:string 常见的字符串操作下一篇文章: 这个模块提供了与 Perl 语言类似的正则表达式匹配操作。 模式和被搜索的字...
摘要:如果经过一系列输入,最终如果能达到状态,则输入内容一定满足正则表达式。正则表达式可以转换为,已经有成熟的算法实现这一转换。不过有时候转换为可能导致状态空间的指数增长,因此直接用识别正则表达式。 原文地址 先来看一个让人震撼的小故事,故事来自知乎问题PC用户的哪些行为让你当时就震惊了? 同学在一个化妆品公司上班,旁边一个大妈(四十多岁)发给他一个exl表,让他在里面帮忙找一个经销商的资料...
摘要:学习笔记七数学形态学关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。学习笔记十一尺度不变特征变换,简称是图像局部特征提取的现代方法基于区域图像块的分析。本文的目的是简明扼要地说明的编码机制,并给出一些建议。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 开始之前,我们先来看这样一个提问: pyth...
阅读 909·2023-01-14 11:38
阅读 876·2023-01-14 11:04
阅读 739·2023-01-14 10:48
阅读 1980·2023-01-14 10:34
阅读 941·2023-01-14 10:24
阅读 818·2023-01-14 10:18
阅读 498·2023-01-14 10:09
阅读 571·2023-01-14 10:02