最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

python的正则表达式re模块的常用方法

来源:懂视网 责编:小采 时间:2020-11-27 14:29:41
文档

python的正则表达式re模块的常用方法

python的正则表达式re模块的常用方法:1.re的简介 使用python的re模块,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息。python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配。 代码如下: import
推荐度:
导读python的正则表达式re模块的常用方法:1.re的简介 使用python的re模块,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息。python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配。 代码如下: import

1.re的简介
使用python的re模块,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息。python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配。

代码如下:


import re
print re.__doc__

可以查询re模块的功能信息,下面会结合几个例子说明。

2.re的正则表达式语法

正则表达式语法表如下:

语法 意义 说明
"." 任意字符
"^" 字符串开始 '^hello'匹配'helloworld'而不匹配'aaaahellobbb'
"$" 字符串结尾 与上同理
"*"
0 个或多个字符(贪婪匹配)
<*>匹配chinaunix
"+"
1 个或多个字符(贪婪匹配)
与上同理
"?"
0 个或多个字符(贪婪匹配)
与上同理
*?,+?,??
以上三个取第一个匹配结果(非贪婪匹配) <*>匹配<BR></TD></TR> <TR> <TD>{m,n}<BR></TD> <TD>对于前一个字符重复m到n次,{m}亦可<BR></TD> <TD>a{6}匹配6个a、a{2,4}匹配2到4个a </TD></TR> <TR> <TD>{m,n}?<BR></TD> <TD>对于前一个字符重复m到n次,并取尽可能少<BR></TD> <TD>‘aaaaaa'中a{2,4}只会匹配2个 </TD></TR> <TR> <TD>"\\"<BR></TD> <TD>特殊字符转义或者特殊序列 </TD> <TD><BR></TD></TR> <TR> <TD>[]<BR></TD> <TD>表示一个字符集 </TD> <TD>[0-9]、[a-z]、[A-Z]、[^0] </TD></TR> <TR> <TD>"|"<BR></TD> <TD>或 </TD> <TD>A|B,或运算 </TD></TR> <TR> <TD>(...)<BR></TD> <TD>匹配括号中任意表达式 </TD> <TD><BR></TD></TR> <TR> <TD>(?#...)<BR></TD> <TD>注释,可忽略 </TD> <TD><BR></TD></TR> <TR> <TD>(?=...)<BR></TD> <TD>Matches if ... matches next, but doesn't consume the string.<BR></TD> <TD>'(?=test)' 在hellotest中匹配hello </TD></TR> <TR> <TD>(?!...)<BR></TD> <TD>Matches if ... doesn't match next.<BR></TD> <TD>'(?!=test)' 若hello后面不为test,匹配hello<BR></TD></TR> <TR> <TD>(?<=...) <BR></TD> <TD>Matches if preceded by ... (must be fixed length).<BR></TD> <TD>'(?<=hello)test' 在hellotest中匹配test<BR></TD></TR> <TR> <TD>(?</TD> <TD>Matches if not preceded by ... (must be fixed length).<BR></TD> <TD>'(?</TD></TR></TBODY></TABLE><BR>正则表达式特殊序列表如下: <p> <TABLE style="WIDTH: 60%" borderColor=#000000 cellSpacing=0 cellPadding=2 border=1> <TBODY> <TR> <TD>特殊序列符号<BR></TD> <TD>意义 </TD></TR> <TR> <TD>\A<BR></TD> <TD>只在字符串开始进行匹配 </TD></TR> <TR> <TD>\Z<BR></TD> <TD>只在字符串结尾进行匹配 </TD></TR> <TR> <TD>\b<BR></TD> <TD>匹配位于开始或结尾的空字符串 </TD></TR> <TR> <TD>\B<BR></TD> <TD>匹配不位于开始或结尾的空字符串 </TD></TR> <TR> <TD>\d<BR></TD> <TD>相当于[0-9] </TD></TR> <TR> <TD>\D<BR></TD> <TD>相当于[^0-9] </TD></TR> <TR> <TD>\s<BR></TD> <TD>匹配任意空白字符:[\t\n\r\r\v] </TD></TR> <TR> <TD>\S<BR></TD> <TD>匹配任意非空白字符:[^\t\n\r\r\v] </TD></TR> <TR> <TD>\w<BR></TD> <TD>匹配任意数字和字母:[a-zA-Z0-9] </TD></TR> <TR> <TD>\W<BR></TD> <TD>匹配任意非数字和字母:[^a-zA-Z0-9] </TD></TR></TBODY></TABLE><BR> <P>3.re的主要功能函数</P> <P> 常用的功能函数包括:compile、search、match、split、findall(finditer)、sub(subn)<BR>compile<BR>re.compile(pattern[, flags])<BR>作用:把正则表达式语法转化成正则表达式对象<BR>flags定义包括:<BR>re.I:忽略大小写<BR>re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境<BR>re.M:多行模式<BR>re.S:' . '并且包括换行符在内的任意字符(注意:' . '不包括换行符)<BR>re.U: 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库</P> <P>search<BR>re.search(pattern, string[, flags])<BR>search (string[, pos[, endpos]])<BR>作用:在字符串中查找匹配正则表达式模式的位置,返回 MatchObject 的实例,如果没有找到匹配的位置,则返回 None。</P> <P>match<BR>re.match(pattern, string[, flags])<BR>match(string[, pos[, endpos]])<BR>作用:match() 函数只在字符串的开始位置尝试匹配正则表达式,也就是只报告从位置 0 开始的匹配情况,而 search() 函数是扫描整个字符串来查找匹配。如果想要搜索整个字符串来寻找匹配,应当用 search()。</P> <P>下面是几个例子:<BR>例:最基本的用法,通过re.RegexObject对象调用</P> <P> 代码如下:</p><BR>#!/usr/bin/env python<BR>import re<BR>r1 = re.compile(r'world')<BR>if r1.match('helloworld'):<BR> print 'match succeeds'<BR>else:<BR> print 'match fails'<BR>if r1.search('helloworld'):<BR> print 'search succeeds'<BR>else:<BR> print 'search fails' <BR></p></P> <P>说明一下:r是raw(原始)的意思。因为在表示字符串中有一些转义符,如表示回车'\n'。如果要表示\表需要写为'\\'。但如果我就是需要表示一个'\'+'n',不用r方式要写为:'\\n'。但使用r方式则为r'\n'这样清晰多了。</P> <P>例:设置flag<BR> 代码如下:</p><BR>#r2 = re.compile(r'n$', re.S)<BR>#r2 = re.compile('\n$', re.S)<BR>r2 = re.compile('World$', re.I)<BR>if r2.search('helloworld\n'):<BR> print 'search succeeds'<BR>else:<BR> print 'search fails' <BR></p><script type="text/javascript" src="https://jss.51dongshi.com/pcwz/wenzhong.js"></script><BR>例:直接调用<BR> 代码如下:</p><BR>if re.search(r'abc','helloaaabcdworldn'):<BR> print 'search succeeds'<BR>else:<BR> print 'search fails' <BR></p></P> <P>split<BR>re.split(pattern, string[, maxsplit=0, flags=0])<BR>split(string[, maxsplit=0])<BR>作用:可以将字符串匹配正则表达式的部分割开并返回一个列表<BR>例:简单分析ip</P> <P> 代码如下:</p><BR>#!/usr/bin/env python<BR>import re<BR>r1 = re.compile('W+')<BR>print r1.split('192.168.1.1')<BR>print re.split('(W+)', '192.168.1.1')<BR>print re.split('(W+)', '192.168.1.1', 1) <BR></p><BR>结果如下:<BR>['192', '168', '1', '1']<BR>['192', '.', '168', '.', '1', '.', '1']<BR>['192', '.', '168.1.1']</P> <P>findall<BR>re.findall(pattern, string[, flags])<BR>findall(string[, pos[, endpos]])<BR>作用:在字符串中找到正则表达式所匹配的所有子串,并组成一个列表返回<BR>例:查找[]包括的内容(贪婪和非贪婪查找)</P> <P> 代码如下:</p><BR>#!/usr/bin/env python<BR>import re<BR>r1 = re.compile('([.*])')<BR>print re.findall(r1, "hello[hi]heldfsdsf[iwonder]lo")<BR>r1 = re.compile('([.*?])')<BR>print re.findall(r1, "hello[hi]heldfsdsf[iwonder]lo")<BR>print re.findall('[0-9]{2}',"fdskfj1323jfkdj")<BR>print re.findall('([0-9][a-z])',"fdskfj1323jfkdj")<BR>print re.findall('(?=www)',"afdsfwwwfkdjfsdfsdwww")<BR>print re.findall('(?<=www)',"afdsfwwwfkdjfsdfsdwww") <BR></p></P> <P>finditer<BR>re.finditer(pattern, string[, flags])<BR>finditer(string[, pos[, endpos]])<BR>说明:和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并组成一个迭代器返回。同样 RegexObject 有:</P> <P>sub<BR>re.sub(pattern, repl, string[, count, flags])<BR>sub(repl, string[, count=0])<BR>说明:在字符串 string 中找到匹配正则表达式 pattern 的所有子串,用另一个字符串 repl 进行替换。如果没有找到匹配 pattern 的串,则返回未被修改的 string。Repl 既可以是字符串也可以是一个函数。<BR>例:</P> <P> 代码如下:</p><BR>#!/usr/bin/env python<BR>import re<BR>p = re.compile('(one|two|three)')<BR>print p.sub('num', 'one word two words three words apple', 2) <BR></p></P> <P>subn<BR>re.subn(pattern, repl, string[, count, flags])<BR>subn(repl, string[, count=0])</P> <P>说明:该函数的功能和 sub() 相同,但它还返回新的字符串以及替换的次数。同样 RegexObject 有: </p><p><script type="text/javascript" src="https://jss.51dongshi.com/pcwz/dysph.js"></script><p><strong>声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com</strong></p></div> <div class="downbox clearfix"> <div class="ico"><img src="https://js.51dongshi.com/tpl/pc2/images/document.png" alt="文档"></div> <div class="txt"> <h4>python的正则表达式re模块的常用方法</h4> <div class="co">python的正则表达式re模块的常用方法:1.re的简介 使用python的re模块,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息。python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配。 代码如下: import </div> <div class="tj"><b>推荐度:</b><div class="tj_stars_list"><i class="tj_stars tj_05"></i></div></div> </div> <div class="btn"> <a href="javascript:;" class="html2word" data-model="article" data-id="ccahhs" title="文档下载"> <b>点击下载本文</b> <span>文档为doc格式</span> </a> </div> </div> <script>keji_detail_ga('article_content_bottom');</script> <div class="tvideo_tag"> 标签: <a href="/tlist-9297/">方法</a> <a href="/tlist-534893/">python</a> <a href="/tlist-898702/">正则表达式</a> </div> <div class="tvideo_box tvideo_box_tab"> <div class="hd"> <ul><li class="on">热门焦点</li><script>keji_detail_ga('hot_jiaodian_tab_title');</script></ul> </div> <div class="bd"> <ul class="ult_jpic clearfix"> <script>get_hot_jiaodian_content('wz_hot_jiaodian',33,'hot',1);</script> </ul> </div> </div> </div> <!--中间文章 end--> <!--右侧专题 star--> <div class="ult_zt"> <script>keji_detail_ga('article_right_top');</script> <div class="ult_ztbox"> <h4>最新推荐</h4> <ul class="tvideo_r_a clearfix"> <script>get_detail_right('wz_right_new',33,'')</script> </ul> </div> <script>keji_detail_ga('article_right_middle');</script> <div class="ult_ztbox"> <h4>猜你喜欢</h4> <ul class="telist_rb clearfix"> <script>get_detail_right('wz_right_love',33,'')</script> </ul> </div> <script>keji_detail_ga('article_right_new_bottom');</script> <div class="ult_ztbox"> <h4>热门推荐</h4> <ul class="tvideo_r_b clearfix"> <script>get_detail_right('wz_right_hot',33,'')</script> </ul> </div> <script>keji_detail_ga('article_right_bottom');</script> </div> <!--右侧专题 end--> <div style="display:none"><a href="https://www.xyx234.com/wzztf/cc/ccahhs/">专题</a> </div> </div> </div> <script src="https://js.51dongshi.com/plug/qrcode/qrcode.min.js"></script> <script src="https://js.51dongshi.com/js/share.js" charset="UTF-8"></script> <script type="text/javascript" src="https://js.51dongshi.com/tpl/pc2/js/waypoints.min.js"></script> <script type="text/javascript" src="https://js.51dongshi.com/tpl/pc2/js/icon_step.js"></script> <style> #qrcode{padding: 15px;background: #fff;} </style> <div id="qrcode" style="display: none"></div> <script>new QRCode(document.getElementById("qrcode"), "https://m.xyx234.com/eedfccahhs.html");</script> <iframe src="https://hits.51dongshi.com/?biao=ho_article&id=889553" border="0" frameborder="0" style="width: 0px; height: 0px"></iframe> <script src="https://js.51dongshi.com/js/shHighlighter.js"></script> <link rel="stylesheet" href="https://jss.51dongshi.com/js/fffz/css/box.css"> <script id="fffz" data-domain="//www.xyx234.com/index" src="https://js.51dongshi.com/js/fffz/fffz.js"></script> <script type="text/javascript" src="https://jss.51dongshi.com/pcwz/tj.js"></script> <div style="display:none"><script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?4b1ebb0298b66c8a109db070c4878833"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </div> <!--foot star--> <div class="footer"> <div class="m_box"> <div class="footer_in"> <a href="#" target="_blank">产品服务</a> <a href="#" target="_blank">发展历程</a> <a href="#" target="_blank">企业资讯</a> <a href="#" target="_blank">企业文化</a> <a href="#" target="_blank">关于我们</a> <a href="#" target="_blank">加入我们</a> <a href="#" target="_blank">联系我们</a> <a href="#" target="_blank">网站导航</a> <a href="#" target="_blank">网站律师</a> </div> <ul class="ftrlist"> <li> <a rel="nofollow" href="https://www.itrust.org.cn" target="_blank"> <img src="https://js.51dongshi.com/tpl/pc2/images/footer_logo01.gif" alt="中国互联网协会"></a> </li> <li> <a rel="nofollow" href="https://www.12377.cn/" target="_blank"> <img src="https://js.51dongshi.com/tpl/pc2/images/12377logo.png" alt="中国互联网举报中心"></a> </li> <li> <a rel="nofollow" href="http://www.cyberpolice.cn/" target="_blank"> <img src="https://js.51dongshi.com/tpl/pc2/images/footer_logo05.gif" alt="网络110报警服务"></a> </li> <li> <a rel="nofollow" href="http://www.creditchina.gov.cn/" target="_blank"> <img src="https://js.51dongshi.com/tpl/pc2/images/creditchina.gif" alt="信用中国"></a> </li> <li class="last"> <a rel="nofollow" href="http://www.shdf.gov.cn/shdf/channels/740.html" target="_blank"> <img src="https://js.51dongshi.com/tpl/pc2/images/footer_logo11.png" alt="中国扫黄打非网"><p>中国扫黄打非网</p> </a> </li> </ul> <div class="footer_co"> <a href="/" class="footlogo"><img src="https://js.51dongshi.com/tpl/pc2/images/logo_bottom.png" alt="懂视"></a> <p>Copyright © 2019-2024 <a href="/" target="_blank">51dongshi.com</a> 版权所有</p> <p> <a rel="nofollow" target="_blank" href="https://beian.miit.gov.cn/">赣ICP备2023002352号-2</a> </p> <p>违法及侵权请联系:TEL:177 7030 7066 E-MAIL:11247931@qq.com 本站由北京市万商天勤律师事务所王兴未律师提供法律服务</p> </div> </div> </div> <!--foot end--> <a href="#0" class="cd-top">Top</a> <script type="text/javascript"> $(function(){ var _line=parseInt($(window).height()/3); $(window).scroll(function(){ if ($(window).scrollTop()>100) { $('.edu_top').css({'position':'fixed','top':'0','z-index':'99'}) }else{ $('.edu_top').css({'position':'relative','top':'0'}) } }) }) </script> <script type="text/javascript" src="https://jss.51dongshi.com/ga/all.js"></script> <div style="display:none"> <script type="text/javascript" src="https://s9.cnzz.com/z_stat.php?id=1278135046&web_id=1278135046"></script><script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?70ec0a2c78df5a4a3d49e475e943ceb6"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script><script> (function(){ var src = (document.location.protocol == "http:") ? "https://js.passport.qihucdn.com/11.0.1.js?d1f620a645f12a1c5b0bbce7b998d51e":"https://jspassport.ssl.qhimg.com/11.0.1.js?d1f620a645f12a1c5b0bbce7b998d51e"; document.write('<script src="' + src + '" id="sozz"><\/script>'); })(); </script></div> </body> </html>