python的正则表达式re模块的常用方法
admin
2023-07-31 02:02:44
0

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

复制代码 代码如下:
import re
print re.__doc__

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

2.re的正则表达式语法

正则表达式语法表如下:

语法 意义 说明
\”.\” 任意字符
\”^\” 字符串开始 \’^hello\’匹配\’helloworld\’而不匹配\’aaaahellobbb\’
\”$\” 字符串结尾 与上同理
\”*\”  0 个或多个字符(贪婪匹配) <*>匹配chinaunix
\”+\” 1 个或多个字符(贪婪匹配 与上同理
\”?\” 0 个或多个字符(贪婪匹配 与上同理
*?,+?,?? 以上三个取第一个匹配结果(非贪婪匹配 <*>匹配</span></td> </tr> <tr> <td><span>{m,n}</span></td> <td><span>对于前一个字符重复m到n次,{m}亦可</span></td> <td><span>a{6}匹配6个a、a{2,4</span><span>}匹配2到4个a</span> </td> </tr> <tr> <td><span>{m,n}?</span></td> <td><span>对于前一个字符重复m到n次,并取尽可能少</span><span></span></td> <td><span>‘aaaaaa</span><span>\’中a{2,4}只会匹配2个</span> </td> </tr> <tr> <td><span>\”\\\\\”</span></td> <td><span>特殊字符转义或者特殊序列</span> </td> <td></td> </tr> <tr> <td><span>[]</span></td> <td><span>表示一个字符集</span> </td> <td><span>[0-9]、[a-z</span><span>]、[A-Z</span><span>]、[^0]</span> </td> </tr> <tr> <td><span>\”|\”</span></td> <td><span>或</span> </td> <td><span>A|B,或运算</span> </td> </tr> <tr> <td><span>(…)</span></td> <td><span>匹配括号中任意表达式</span> </td> <td></td> </tr> <tr> <td><span>(?#…)</span></td> <td><span>注释,可忽略</span> </td> <td></td> </tr> <tr> <td><span>(?=…)</span></td> <td><span>Matches if … matches next, but doesn\’t consume the string.</span><span></span></td> <td><span>\'(?=test)\’  </span><span>在hellotest中匹配hello</span> </td> </tr> <tr> <td><span>(?!…)</span></td> <td><span>Matches if … doesn\’t match next.</span><span></span></td> <td><span>\'(?!=test)\’</span><span>  </span><span>若hello后面不为test,匹配hello</span></td> </tr> <tr> <td><span>(?<=…) </span></td> <td><span>Matches if preceded by … (must be fixed length).</span><span></span></td> <td><span><span>\'(?<=hello</span><span>)test\’  </span></span><span>在hellotest中匹配test</span></td> </tr> <tr> <td><span>(?<!…)</span></td> <td><span>Matches if not preceded by … (must be fixed length).</span><span></span></td> <td><span>\'(?<!hello)</span><span>test\’  在hellotest中不匹配test</span></td> </tr> </tbody> </table> <p>正则表达式特殊序列表如下: </p> <table border="1" cellpadding="2" cellspacing="0"> <tbody> <tr> <td><span>特殊序列符号</span></td> <td><span>意义</span> </td> </tr> <tr> <td><span>\\A</span></td> <td><span>只在字符串开始进行匹配</span> </td> </tr> <tr> <td><span>\\Z</span></td> <td><span>只在字符串结尾进行匹配</span> </td> </tr> <tr> <td><span>\\b</span></td> <td><span>匹配位于开始或结尾的空字符串</span> </td> </tr> <tr> <td><span>\\B</span></td> <td><span>匹配不位于开始或结尾的空字符串</span> </td> </tr> <tr> <td><span>\\d</span></td> <td><span>相当于[0-9]</span> </td> </tr> <tr> <td><span>\\D</span></td> <td><span>相当于[^0-9]</span> </td> </tr> <tr> <td><span>\\s</span></td> <td><span>匹配任意空白字符:[\\t\\n\\r\\r\\v]</span> </td> </tr> <tr> <td><span>\\S</span></td> <td><span>匹配任意非空白字符:</span><span>[^\\t\\n\\r\\r\\v</span><span>]</span> </td> </tr> <tr> <td><span>\\w</span></td> <td><span>匹配任意数字和字母:[a-zA-Z0-9]</span> </td> </tr> <tr> <td><span>\\W</span></td> <td><span>匹配任意非数字和字母:[^a-zA-Z0-9]</span> </td> </tr> </tbody> </table> <p></p> <p><strong>3.re的主要功能函数</strong></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><strong>下面是几个例子:<br /></strong>例:最基本的用法,通过re.RegexObject对象调用</p> </p> <p><span><u>复制代码</u></span> 代码如下:<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\’ </p> <p>说明一下:r是raw(原始)的意思。因为在表示字符串中有一些转义符,如表示回车\’\\n\’。如果要表示\\表需要写为\’\\\\\’。但如果我就是需要表示一个\’\\\’+\’n\’,不用r方式要写为:\’\\\\n\’。但使用r方式则为r\’\\n\’这样清晰多了。</p> <p>例:设置flag</p> <p><span><u>复制代码</u></span> 代码如下:<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\’ </p> <p>例:直接调用<br /><span><u>复制代码</u></span> 代码如下:<br />if re.search(r\’abc\’,\’helloaaabcdworldn\’):<br />    print \’search succeeds\’<br />else:<br />    print \’search fails\’ </p> <p>split<br />re.split(pattern, string[, maxsplit=0, flags=0])<br />split(string[, maxsplit=0])<br />作用:可以将字符串匹配正则表达式的部分割开并返回一个列表<br />例:简单分析ip</p> </p> <p><span><u>复制代码</u></span> 代码如下:<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) </p> <p>结果如下:<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><span><u>复制代码</u></span> 代码如下:<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\”) </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><span><u>复制代码</u></span> 代码如下:<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) </p> <p>subn<br />re.subn(pattern, repl, string[, count, flags])<br />subn(repl, string[, count=0])</p> <p>说明:该函数的功能和 sub() 相同,但它还返回新的字符串以及替换的次数。同样 RegexObject 有:</p> <!--end::Text--> </div> <!--end::Description--> <div class="mt-5"> <!--关键词搜索--> <a href="/index.php?s=article&c=search&keyword=%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F" class="badge badge-light-primary fw-bold my-2" target="_blank">正则表达式</a> <a href="/index.php?s=article&c=search&keyword=re%E6%A8%A1%E5%9D%97" class="badge badge-light-primary fw-bold my-2" target="_blank">re模块</a> </div> <div class="mt-5"> <p class="fc-show-prev-next"> <strong>上一篇:</strong><a href="/program/41284.html">python list 合并连接字符串的方法</a><br> </p> <p class="fc-show-prev-next"> <strong>下一篇:</strong><a href="/program/41286.html">py2exe 编译ico图标的代码</a> </p> </div> <!--begin::Block--> <div class="d-flex flex-stack mb-2 mt-10"> <!--begin::Title--> <h3 class="text-dark fs-5 fw-bold text-gray-800">相关内容</h3> <!--end::Title--> </div> <div class="separator separator-dashed mb-9"></div> <!--end::Block--> <div class="row g-10"> </div> </div> <!--end::Table widget 14--> </div> <!--end::Col--> <!--begin::Col--> <div class="col-xl-4 mt-0"> <!--begin::Chart Widget 35--> <div class="card card-flush h-md-100"> <!--begin::Header--> <div class="card-header pt-5 "> <!--begin::Title--> <h3 class="card-title align-items-start flex-column"> <!--begin::Statistics--> <div class="d-flex align-items-center mb-2"> <!--begin::Currency--> <span class="fs-5 fw-bold text-gray-800 ">热门资讯</span> <!--end::Currency--> </div> <!--end::Statistics--> </h3> <!--end::Title--> </div> <!--end::Header--> <!--begin::Body--> <div class="card-body pt-3"> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/program/39278.html" class="text-dark fw-bold text-hover-primary fs-6">500 行 Python 代码...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/program/831667.html" class="text-dark fw-bold text-hover-primary fs-6">定时清理删除C:\Progra...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/program/3333.html" class="text-dark fw-bold text-hover-primary fs-6">65536是2的几次方 计算2...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/program/4386.html" class="text-dark fw-bold text-hover-primary fs-6">Mobi、epub格式电子书如...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/uploadfile/202403/9fc6c8bf38a85fb.png#没有设置高宽参数,将以原图输出')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/program/831666.html" class="text-dark fw-bold text-hover-primary fs-6">scoped_dir32_70...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/program/831649.html" class="text-dark fw-bold text-hover-primary fs-6"> pycparser 是一个用...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">`pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/program/783.html" class="text-dark fw-bold text-hover-primary fs-6">小程序支付时提示:appid和...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">[Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/program/4837.html" class="text-dark fw-bold text-hover-primary fs-6">微信小程序使用slider实现...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/program/41773.html" class="text-dark fw-bold text-hover-primary fs-6">python绘图库Matplo...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('/static/assets/images/nopic.gif')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/program/7319.html" class="text-dark fw-bold text-hover-primary fs-6">Prometheus+Graf...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...</span> </div> <!--end::Title--> </div> </div> <!--end::Body--> </div> <!--end::Chart Widget 35--> </div> <!--end::Col--> </div> </div> <!--end::Content container--> </div> <!--end::Content--> </div> <!--end::Content wrapper--> <!--begin::Footer--> <div id="kt_app_footer" class="app-footer"> <!--begin::Footer container--> <div class="app-container container-xxl d-flex flex-column flex-md-row flex-center flex-md-stack py-3"> <!--begin::Copyright--> <div class="text-dark order-2 order-md-1"> <span class="text-muted fw-semibold me-1">2025 ©</span> 晓说杂谈<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f7b4581e1f9f88ac28d46df58a8d3ff5"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <a target="_blank" href="https://beian.miit.gov.cn/">豫ICP备13019747号-13</a> </div> <!--end::Copyright--> <!--begin::Menu--> <ul class="menu menu-gray-600 menu-hover-primary fw-semibold order-1"> <li class="menu-item"> <a href="/tech" target="_blank" class="menu-link px-2">科技分享</a> </li> <li class="menu-item"> <a href="/web" target="_blank" class="menu-link px-2">网络技术</a> </li> <li class="menu-item"> <a href="/hardware" target="_blank" class="menu-link px-2">硬件设备</a> </li> <li class="menu-item"> <a href="/program" target="_blank" class="menu-link px-2">程序人生</a> </li> <li class="menu-item"> <a href="/jinrong" target="_blank" class="menu-link px-2">探索发现</a> </li> <li class="menu-item"> <a href="/jixie" target="_blank" class="menu-link px-2">机械加工</a> </li> <li class="menu-item"> <a href="/dianshang" target="_blank" class="menu-link px-2">电商</a> </li> <li class="menu-item"> <a href="/other" target="_blank" class="menu-link px-2">其他</a> </li> <li class="menu-item"> <a href="/zhishi" target="_blank" class="menu-link px-2">日常知识</a> </li> <li class="menu-item"> <a href="/yulu" target="_blank" class="menu-link px-2">每日语录</a> </li> </ul> <!--end::Menu--> </div> <!--end::Footer container--> </div> <!--end::Footer--> </div> <!--end:::Main--> </div> <!--end::Wrapper--> </div> <!--end::Page--> </div> <!--end::App--> <div id="kt_scrolltop" class="scrolltop" data-kt-scrolltop="true"> <!--begin::Svg Icon | path: icons/duotune/arrows/arr066.svg--> <span class="svg-icon"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <rect opacity="0.5" x="13" y="6" width="13" height="2" rx="1" transform="rotate(90 13 6)" fill="currentColor"></rect> <path d="M12.5657 8.56569L16.75 12.75C17.1642 13.1642 17.8358 13.1642 18.25 12.75C18.6642 12.3358 18.6642 11.6642 18.25 11.25L12.7071 5.70711C12.3166 5.31658 11.6834 5.31658 11.2929 5.70711L5.75 11.25C5.33579 11.6642 5.33579 12.3358 5.75 12.75C6.16421 13.1642 6.83579 13.1642 7.25 12.75L11.4343 8.56569C11.7467 8.25327 12.2533 8.25327 12.5657 8.56569Z" fill="currentColor"></path> </svg> </span> <!--end::Svg Icon--> </div> <!--begin::Javascript--> <script>var hostUrl = "/static/default/pc/";</script> <!--begin::Global Javascript Bundle(mandatory for all pages)--> <script src="/static/default/pc/plugins/global/plugins.bundle.js"></script> <script src="/static/default/pc/js/scripts.bundle.js"></script> <!--end::Global Javascript Bundle--> <!--end::Javascript--> </body> <!--end::Body--> </html>