文档章节

[转] Python 正则re模块之findall()详解

o
 osc_4nmshwhm
发布于 2018/08/07 02:09
字数 1404
阅读 9
收藏 0

精选30+云产品,助力企业轻松上云!>>>

<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post"> <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-e2445db1a8.css"> <div class="htmledit_views">

<h5>1.&nbsp;先说一下findall()函数的两种表示形式</h5> <div> <pre onclick="hljs.copyCode(event)"><code class="language-python hljs"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">import</span> re</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">kk = re.compile(<span class="hljs-string">r'\d+'</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">kk.findall(<span class="hljs-string">'one1two2three3four4'</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment">#[1,2,3,4]</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment">#注意此处findall()的用法,可传两个参数;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">kk = re.compile(<span class="hljs-string">r'\d+'</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">re.findall(kk,<span class="hljs-string">"one123"</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment">#[1,2,3]</span></div></div></li></ol></code><div class="hljs-button" data-title="复制"></div></pre> <h5>2. 正则表达式可能遇到的坑&nbsp; --- 正则表达式中有括号()</h5> </div> <div><span style="font-family:'Microsoft YaHei';">1. 正则表达式中当没有括号时,就是正常匹配,在本例中"/w+/s+/w+"第一次匹配到的字符为"2345&nbsp; 3456",由于是贪婪模式会&nbsp; &nbsp; &nbsp;继续匹配,第二次从"4567"开始匹配匹配到的结果为字符串"4567 5678"</span><br></div> <div><span style="font-family:SimHei;"><br></span></div> <div><span style="font-family:SimHei;"></span> <pre onclick="hljs.copyCode(event)"><code class="language-python hljs"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">import</span> re</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">string=<span class="hljs-string">"2345 3456 4567 5678"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">regex=re.compile(<span class="hljs-string">"\w+\s+\w+"</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">print(regex.findall(string))</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment">#['2345 3456', '4567 5678']</span></div></div></li></ol></code><div class="hljs-button" data-title="复制"></div></pre> <span style="font-family:'Microsoft YaHei';">&nbsp; !!!&nbsp;&nbsp;首先的知道各个字符所表达的含义,这里只说一下/s 和 /S<br> &nbsp; &nbsp; &nbsp; &nbsp;\s -- 匹配任何不可见字符,包括空格、制表符、换页符等等&nbsp;</span></div> <div><span style="font-family:'Microsoft YaHei';">&nbsp; &nbsp; &nbsp; \S -- 匹配任何可见字符&nbsp; &nbsp;通常[/s/S] -- 可匹配任意字符</span></div> <div><span style="font-family:'Microsoft YaHei';">&nbsp; &nbsp; &nbsp; [\s\S]*? -- 匹配懒惰模式的任意字符</span></div> <div><span style="font-family:'Microsoft YaHei';"><br></span></div> <div><span style="font-family:'Microsoft YaHei';">2. 正则表达式中有一个括号时,其输出的内容就是括号匹配到的内容,而不是整个表达式所匹配到的结果,但是整个正则表达式执&nbsp; &nbsp; &nbsp; &nbsp;行了只不过只输出括号匹配到的内容, 在第一次匹配时跟上述没有括号时一样,匹配到 "2345&nbsp; 3456" ,只不过只输出(/w+)匹配&nbsp; &nbsp; &nbsp;到的结果 即"2345",第二次匹配同理从"4567" 开始,匹配到"4567&nbsp; 5678",但是还是只是输出"4567"</span></div> <div><span style="font-family:SimHei;"><br></span></div> <div><span style="font-family:SimHei;"></span> <pre onclick="hljs.copyCode(event)"><code class="language-python hljs"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">import</span> re</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">string=<span class="hljs-string">"2345 3456 4567 5678"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">regex=re.compile(<span class="hljs-string">"(\w+)\s+\w+"</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">print(regex.findall(string))</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment">#['2345', '4567']</span></div></div></li></ol></code><div class="hljs-button" data-title="复制"></div></pre> 3. 当正则表达式中有两个括号时,其输出是一个list 中包含2个 tuple,从输出的结果可以看出,有两个元组,每一个元组中有两&nbsp; &nbsp; &nbsp; &nbsp;个字符串 : 其中第一个字符串"2345 3456"是最外面的括号输出的结果,第二个是里面括号(/w+)输出的结果 "2345", 第二个&nbsp; &nbsp; &nbsp; &nbsp;元组是&nbsp; 第二次匹配的结果 -- 详解同第一次匹配。</div> <div><span style="font-family:SimHei;"><br></span></div> <div> <pre onclick="hljs.copyCode(event)"><code class="language-python hljs"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">import</span> re</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">string=<span class="hljs-string">"2345 3456 4567 5678"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">regex=re.compile(<span class="hljs-string">"((\w+)\s+\w+)"</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">print(regex.findall(string))</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment">#[('2345 3456', '2345'), ('4567 5678', '4567')]</span></div></div></li></ol></code><div class="hljs-button" data-title="复制"></div></pre> <br><h5><span style="font-family:'Microsoft YaHei';">希望对大家有帮助!!&nbsp; 远离大坑</span></h5> </div> <div><span style="font-family:SimHei;"><br><br><br></span></div> </div> </div>

原文:https://blog.csdn.net/zd147896325/article/details/79010621

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

Eclipse_JavaEE_Tomcat_MySQL环境配置

安装java环境,配置系统变量(JAVA_HOME,绝对路径) 下载eclipse+Tomcat+mysql window——》preference——》server——》runtime——》tomcat环境 项目右键build path 配mysql jar ,libra...

愿有时光可回首
19分钟前
20
0
MySQL原理 - InnoDB引擎 - 行记录存储 - Redundant行格式

本文基于 MySQL 8 在上一篇:MySQL原理 - InnoDB引擎 - 行记录存储 - Compact格式 中,我们介绍了什么是 InnoDB 行记录存储以及 Compact 行格式,在这一篇中,我们继续介绍其他三种行格式。 ...

zhxhash
40分钟前
17
0
leetcode面试题 17.13(恢复空格)--Java语言实现

求: 哦,不!你不小心把一个长篇文章中的空格、标点都删掉了,并且大写也弄成了小写。像句子"I reset the computer. It still didn’t boot!"已经变成了"iresetthecomputeritstilldidntboo...

拓拔北海
48分钟前
19
0
B站跨年晚会究竟做对了什么?

燃财经(ID:rancaijing)原创 作者 | 赵磊 编辑 | 周昶帆 “补课”是《bilibili晚会 二零一九最美的夜》这个视频中,观众在前两分钟刷得最多的弹幕,寓意着观众是在元旦之后回来补看跨年晚会...

子乾建建_Jeff
01/07
45
0
关于Scrapy爬虫项目运行和调试的小技巧(上篇)

点击上方“Python爬虫与数据挖掘”,进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 迟日江山丽,春风花草香。泥融飞燕子,沙暖睡鸳鸯。 扫除运行Scrapy爬虫程序...

yuhan336
04/02
26
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部