输入banner图图片脚本导航/分类

pythonre正则表达式模块(RegularExpression)

模块的的作用主要是用于字符串和文本处理,查找,搜索,替换等

复习一下基本的正则表达式吧

.:匹配除了换行符以为的任意单个字符

*:匹配任意字符,一个,零个,多个都能匹配得到 俗称贪婪模式

+:匹配位于+之前的一个或者多个字符

|:匹配位于|之前或者之后的字符

^:匹配行首

$:匹配行尾

?:匹配位于?之前的零个或者一个字符,不匹配多个字符

\:表示 \ 之后的为转义字符

[]:匹配[]之中的任意单个字符,[0-9]表示匹配0到9任意一个数字

():将位于()之内的的内容当作一个整体

{}:按{}中的次数进行匹配,100[0-9]{3}表示在100之后任意匹配一个3位数(100-999)

python中以\开头的元字符:

特殊序列符号
意义
\A
只在字符串开始进行匹配
\Z
只在字符串结尾进行匹配
\b
匹配位于开始或结尾的空字符串
\B
匹配不位于开始或结尾的空字符串
\d
相当于[0-9]
\D
相当于[^0-9]
\s
匹配任意空白字符:[\t\n\r\r\v]
\S
匹配任意非空白字符:[^\t\n\r\r\v]
\w
匹配任意数字和字母:[a-zA-Z0-9]
\W
匹配任意非数字和字母:[^a-zA-Z0-9]

正则表达式语法表

语法 意义 说明
"." 任意字符
"^" 字符串开始 '^hello'匹配'helloworld'而不匹配'aaaahellobbb'
"$" 字符串结尾 与上同理
"*"
0 个或多个字符(贪婪匹配)
<*>匹配chinaunix
"+"
1 个或多个字符(贪婪匹配
与上同理
"?"
0 个或多个字符(贪婪匹配
与上同理
*?,+?,??
以上三个取第一个匹配结果(非贪婪匹配 <*>匹配</span><br style="word-wrap: break-word" /> </td> </tr> <tr style="word-wrap: break-word"> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">{m,n}</span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">对于前一个字符重复m到n次,{m}亦可</span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">a{6}匹配6个a、a{2,4</span><span style="word-wrap: break-word; font-size: 14px">}匹配2到4个a</span></td> </tr> <tr style="word-wrap: break-word"> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">{m,n}?</span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; white-space: normal; font-size: 14px">对于前一个字符重复m到n次,并取尽可能少</span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">‘aaaaaa</span><span style="word-wrap: break-word; font-size: 14px">'中a{2,4}只会匹配2个</span></td> </tr> <tr style="word-wrap: break-word"> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">"\\"</span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">特殊字符转义或者特殊序列</span></td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><br style="word-wrap: break-word" /> </td> </tr> <tr style="word-wrap: break-word"> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">[]</span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">表示一个字符集</span></td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">[0-9]、[a-z</span><span style="word-wrap: break-word; font-size: 14px">]、[A-Z</span><span style="word-wrap: break-word; font-size: 14px">]、[^0]</span></td> </tr> <tr style="word-wrap: break-word"> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">"|"</span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">或</span></td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">A|B,或运算</span></td> </tr> <tr style="word-wrap: break-word"> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">(...)</span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">匹配括号中任意表达式</span></td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><br style="word-wrap: break-word" /> </td> </tr> <tr style="word-wrap: break-word"> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">(?#...)</span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">注释,可忽略</span></td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><br style="word-wrap: break-word" /> </td> </tr> <tr style="word-wrap: break-word"> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">(?=...)</span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">Matches if ... matches next, but doesn't consume the string.</span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">'(?=test)' </span><span style="word-wrap: break-word; font-size: 14px">在hellotest中匹配hello</span></td> </tr> <tr style="word-wrap: break-word"> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">(?!...)</span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">Matches if ... doesn't match next.</span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; white-space: normal; font-size: 14px">'(?!=test)'</span><span style="word-wrap: break-word; font-size: 14px"><span class="Apple-converted-space"> </span> </span><span style="word-wrap: break-word; font-size: 14px">若hello后面不为test,匹配hello</span><br style="word-wrap: break-word" /> </td> </tr> <tr style="word-wrap: break-word"> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">(?<=...) </span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">Matches if preceded by ... (must be fixed length).</span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; white-space: normal"><span style="word-wrap: break-word; font-size: 14px">'(?<=hello</span><span style="word-wrap: break-word; font-size: 14px">)test' </span></span><span style="word-wrap: break-word; font-size: 14px">在hellotest中匹配test</span><br style="word-wrap: break-word" /> </td> </tr> <tr style="word-wrap: break-word"> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">(?<!...)</span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; font-size: 14px">Matches if not preceded by ... (must be fixed length).</span><br style="word-wrap: break-word" /> </td> <td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><span style="word-wrap: break-word; white-space: normal; font-size: 14px">'(?<!hello)</span><span style="word-wrap: break-word; font-size: 14px">test' 在hellotest中不匹配test</span><br style="word-wrap: break-word" /> </td> </tr> </tbody> </table> <br class="Apple-interchange-newline" /> </p> <p>匹配的标志和含义</p> <p> <table border="8" align="left" style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; border-spacing: 0px; width: 320px; padding-right: 0px; border-collapse: collapse; font: 14px/21px Verdana, Arial, Helvetica, sans-serif; white-space: normal; letter-spacing: normal; height: 141px; color: rgb(0,0,0); border-top: silver 1px solid; border-right: silver 1px solid; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"> <tbody style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"> <tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"> <td style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px"><strong style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-size: 12px; padding-top: 0px">标志</span></strong></td> <td style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px"><strong style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-size: 12px; padding-top: 0px">含义</span></strong></td> </tr> <tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"> <td style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-size: 13px; padding-top: 0px">re.I</span></td> <td style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-size: 13px; padding-top: 0px">忽略大小写</span></td> </tr> <tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"> <td style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-size: 13px; padding-top: 0px">re.L</span></td> <td style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-size: 13px; padding-top: 0px">根据本地设置而更改\w,\W,\b,\B,\s,\S的匹配内容</span></td> </tr> <tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"> <td style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-size: 13px; padding-top: 0px">re.M</span></td> <td style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-size: 13px; padding-top: 0px">多行匹配模式</span></td> </tr> <tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"> <td style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-size: 13px; padding-top: 0px">re.S</span></td> <td style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-size: 13px; padding-top: 0px">使“.”元字符匹配换行符</span></td> </tr> <tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"> <td style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-size: 13px; padding-top: 0px">re.U</span></td> <td style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-size: 13px; padding-top: 0px">匹配Unicode字符</span></td> </tr> <tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"> <td style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-size: 13px; padding-top: 0px">re.X</span></td> <td style="border-bottom: silver 1px solid; border-left: silver 1px solid; padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; border-collapse: collapse; border-top: silver 1px solid; border-right: silver 1px solid; padding-top: 3px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-size: 13px; padding-top: 0px">忽略需要匹配模式中的空格,并且可以使用"#"号注释</span></td> </tr> </tbody> </table> </p> <div><br /> </p> <p>文本内容(提取Linux下的password文件)</p> <div class="jb51code"> <pre class="brush:py;"> man:x:6:12:man:/var/cache/man:/bin/nologin </script></pre> </p> <p>re模块中有3个搜索函数,每个函数都接受3个参数(匹配模式,要匹配的字符串,进行匹配的标志),如果匹配到了就返回一个对象实例,么有就返会None.</p> <p>findall():用于在字符串中查找符合正则表达式的字符串,并返回这些字符串的列表</p> <p>search():搜索整个字符串,返回对象实例</p> <p>match():只从第一个字符开始匹配,后面的不再匹配,返回对象实例</p> <div class="jb51code"> <pre class="brush:py;"> lovelinux@LoveLinux:~/py/boke$ cat text man:x:6:12:man:/var/cache/man:/bin/sh lovelinux@LoveLinux:~/py/boke$ cat test.py #/usr/bin/env python #coding:utf-8 import re with open('text','r') as txt: f = txt.read() print re.match('bin',f) print re.search('bin',f).end() lovelinux@LoveLinux:~/py/boke$ python test.py None 34 lovelinux@LoveLinux:~/py/boke$ vim test.py lovelinux@LoveLinux:~/py/boke$ python test.py None <_sre.SRE_Match object at 0x7f12fc9f9ed0> </script></pre> </p> <p>返回是对象实例有2个方法,</p> <p>start():返回记录匹配到字符的开始索引 </p> <p>end():返回记录匹配到字符的结束索引</p> <div class="jb51code"> <pre class="brush:py;"> lovelinux@LoveLinux:~/py/boke$ python test.py None 31 34 lovelinux@LoveLinux:~/py/boke$ cat test.py #/usr/bin/env python #coding:utf-8 import re with open('text','r') as txt: f = txt.read() print re.match('bin',f) print re.search('bin',f).start() print re.search('bin',f).end() </script></pre> </div> </div> <script type="text/javascript" src="/layui/layui.js"></script> <script> layui.use('code', function(){ layui.code({ elem: 'pre', //默认值为.layui-code about:false, title:'pythonre正则表达式模块(RegularExpression)代码块', encode: true //是否转义html标签。默认不开启 }); }); </script> <footer class="comm-footer"> <ul class="channels"> <li> <a target="_top" href="/system/">操作系统</a> </li><li> <a target="_top" href="/down/">程序下载</a> </li><li> <a target="_top" href="/jquery/">jquery插件库</a> </li><li> <a target="_top" href="/jiaoben/">编程</a> </li><li> <a target="_top" href="/db/">数据库</a> </li><li> <a target="_top" href="/tools/">在线工具</a> </li><li> <a target="_top" href="/framebook/">框架书籍</a> </li><li> <a target="_top" href="/xitongjiaocheng/">系统教程</a> </li><li> <a target="_top" href="/ruanjianxiazai/">软件下载</a> </li> </ul> <ul class="versions"> <li> <a href="https://m.gxlcms.com" class="active">触屏版</a> </li> <li> <a href="https://www.gxlcms.com" target="_top">电脑版</a> </li> </ul> <p><a href="https://beian.miit.gov.cn/" target="_blank" style="color:#ffffff"></a><script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?6c9b8cea1903c9f813f150c04aeebc3c"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script></p> </footer> </body> </html>