ホームページ >バックエンド開発 >Python チュートリアル >Pythonの正規表現reモジュールの一般的なメソッド

Pythonの正規表現reモジュールの一般的なメソッド

WBOY
WBOYオリジナル
2016-06-16 08:46:371301ブラウズ
1.1.re の概要
Python の re モジュールを使用すると、すべての複雑な一致状況に対応できるわけではありませんが、ほとんどの場合、複雑な文字列を効果的に分析して抽出することができます。 Python は正規表現をバイトコードに変換し、C 言語のマッチング エンジンを使用して深さ優先マッチングを実行します。

コードをコピー コードは次のとおりです:

import re
print re.__doc__


re モジュールの機能情報を問い合わせることができます。以下にいくつかの例を説明します。

2.re の正規表現構文

正規表現構文テーブルは次のとおりです:

には一致しません と一致します <tr> <td> <span style="FONT-SIZE: 14px">{m,n}</span><br> </td> <td> <span style="FONT-SIZE: 14px">前の文字を m ~ n 回繰り返す場合、{m} は </span><br> </td> にすることもできます。 <td> <span style="FONT-SIZE: 14px">a{6} は 6 a に一致し、a{2,4</span><span style="FONT-SIZE: 14px">} は 2 ~ 4 a</span> </td> </tr> に一致します。 <tr> <td> <span style="FONT-SIZE: 14px">{m,n}?</span><br> </td> <td> <span style="FONT-SIZE: 14px; WHITE-SPACE: normal"> 前の文字に対して m ~ n 回繰り返し、できるだけ少なくします </span><span style="FONT-SIZE: 14px"></span><br> </td> <td> <span style="FONT-SIZE: 14px">「ああああああ</span><span style="FONT-SIZE: 14px">」 ({2,4})只会匹配2个</span> </td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">"\\"</span><br> </td> <td> <span style="FONT-SIZE: 14px">特殊字符转义或者特殊序列</span> </td> <td><br></td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">[]</span><br> </td> <td> <span style="FONT-SIZE: 14px">表示一个字符集</span> </td> <td> <span style="FONT-SIZE: 14px">[0-9]、[a-z</span><span style="FONT-SIZE: 14px">]、[A-Z</span><span style="FONT-SIZE: 14px">]、[^0]</span> </td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">"|"</span><br> </td> <td> <span style="FONT-SIZE: 14px">或</span> </td> <td> <span style="FONT-SIZE: 14px">A|B,或运算</span> </td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">(...)</span><br> </td> <td> <span style="FONT-SIZE: 14px">匹配括号中任意表达式</span> </td> <td><br></td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">(?#...)</span><br> </td> <td> <span style="FONT-SIZE: 14px">注释,可忽略</span> </td> <td><br></td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">(?=...)</span><br> </td> <td> <span style="FONT-SIZE: 14px">Matches if ... matches next, but doesn't consume the string.</span><span style="FONT-SIZE: 14px"></span><br> </td> <td> <span style="FONT-SIZE: 14px">'(?=test)'  </span><span style="FONT-SIZE: 14px">在hellotest中匹配hello</span> </td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">(?!...)</span><br> </td> <td> <span style="FONT-SIZE: 14px">Matches if ... doesn't match next.</span><span style="FONT-SIZE: 14px"></span><br> </td> <td> <span style="FONT-SIZE: 14px; WHITE-SPACE: normal">'(?!=test)'</span><span style="FONT-SIZE: 14px">  </span><span style="FONT-SIZE: 14px">若hello后面不为test,匹配hello</span><br> </td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">(?<=...) </span><br> </td> <td> <span style="FONT-SIZE: 14px">Matches if preceded by ... (must be fixed length).</span><span style="FONT-SIZE: 14px"></span><br> </td> <td> <span style="WHITE-SPACE: normal"><span style="FONT-SIZE: 14px">'(?<=hello</span><span style="FONT-SIZE: 14px">)test'  </span></span><span style="FONT-SIZE: 14px">在hellotest中匹配test</span><br> </td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">(?<!...)</span><br> </td> <td> <span style="FONT-SIZE: 14px">Matches if not preceded by ... (must be fixed length).</span><span style="FONT-SIZE: 14px"></span><br> </td> <td> <span style="FONT-SIZE: 14px; WHITE-SPACE: normal">'(?<!hello)</span><span style="FONT-SIZE: 14px">test'  在hellotest中不匹配test</span><br> </td> </tr> </tbody> </table> <br>正则表达式特殊序列表如下: <br><br> <table style="WIDTH: 60%" bordercolor="#000000" cellspacing="0" cellpadding="2" border="1"> <tbody> <tr> <td> <span style="FONT-SIZE: 14px; WHITE-SPACE: normal">特殊序列符号</span><br> </td> <td> <span style="FONT-SIZE: 14px">意义</span> </td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">\A</span><br> </td> <td> <span style="FONT-SIZE: 14px">只在字符串开始进行匹配</span> </td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">\Z</span><br> </td> <td> <span style="FONT-SIZE: 14px">只在字符串结尾进行匹配</span> </td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">\b</span><br> </td> <td> <span style="FONT-SIZE: 14px">匹配位于开始或结尾的空字符串</span> </td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">\B</span><br> </td> <td> <span style="FONT-SIZE: 14px">匹配不位于开始或结尾的空字符串</span> </td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">\d</span><br> </td> <td> <span style="FONT-SIZE: 14px">相当于[0-9]</span> </td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">\D</span><br> </td> <td> <span style="FONT-SIZE: 14px">相当于[^0-9]</span> </td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">\s</span><br> </td> <td> <span style="FONT-SIZE: 14px">匹配任意空白字符:[\t\n\r\r\v]</span> </td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">\S</span><br> </td> <td> <span style="FONT-SIZE: 14px">匹配任意非空白字符:</span><span style="FONT-SIZE: 14px; WHITE-SPACE: normal">[^\t\n\r\r\v</span><span style="FONT-SIZE: 14px; WHITE-SPACE: normal">]</span> </td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">\w</span><br> </td> <td> <span style="FONT-SIZE: 14px">匹配任意数字和字母:[a-zA-Z0-9]</span> </td> </tr> <tr> <td> <span style="FONT-SIZE: 14px">\W</span><br> </td> <td> <span style="FONT-SIZE: 14px">匹配任意非数字和字母:[^a-zA-Z0-9]</span> </td> </tr> </tbody> </table> <br> <p><strong>3.reの主な機能</strong></p> <p> 一般的に使用される関数は次のとおりです: コンパイル、検索、一致、分割、findall (finditer)、sub (subn) <br>compile<br>re.compile(pattern[, flags])<br>関数: 通常の変換式の構文は正規表現オブジェクトに変換されます。 <br>フラグ定義には以下が含まれます。 <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> <div class="codetitle"> <span><u>コードをコピー</u></span> コードは次のとおりです:<div class="codebody" id="code63870"> <br>#!/usr/bin/env python<br>import re<br>r1 = re.compile(r'world')<br>if r1.match('helloworld'):<br> print '一致成功'<br>else:<br> print '一致失敗'<br> if r1.search('helloworld'):<br> print '検索成功'<br>else:<br> print '検索失敗' <br> <p>説明: r は生を意味します。表現文字列にはキャリッジ リターン 'n' などのエスケープ文字が含まれているためです。テーブルを表す場合は、「\」として記述する必要があります。しかし、単に ''+'n' を表現する必要がある場合は、r を使用せずに '\n' と書きます。ただし、r モードを使用すると、r'n' としてより明確になります。 </p> <p>例: Set flag<br></p> <div class="codetitle"> <span><u>コードをコピー</u></span> コードは次のとおりです。<div class="codebody" id="code41844"> <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 ('helloworldn'):<br> print 'search success'<br>else:<br> print 'search failed' <br><br>例: <br><div class="codetitle"> <span>コードをコピーします<u></u> コードは次のとおりです:</span><div class="codebody" id="code81365">if re.search(r'abc','helloaaabcdworldn'):<br> print '検索は成功しました'<br>else: <br> print '検索失敗' <br><br> split<p>re.split(pattern, string[, maxsplit=0, flags=0])<br>split(string[, maxsplit=0])<br>機能: 文字列を正規表現に一致させることができます式の一部を分割してリストを返します<br>例: ip の単純な分析<br> </p> <p></p> <div class="codetitle"> <span>コードをコピー<u></u> コードは次のとおりです:</span><div class="codebody" id="code62802">#!/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><br>結果は次のようになります: <br>['192', '168', '1', ' 1']<br> ['192', '.', '168', '.', '1', '.', '1']<br>['192', '.', '168.1. 1分]<br> findall<p>re.findall(pattern, string[, flags])<br>findall(string[, pos[, endpos]])<br>関数: 文字列内の正規表現と一致するパターンを検索しますすべての部分文字列がリストに結合されて <br> が返されます。 例: [] に含まれるコンテンツを検索します (貪欲検索および非貪欲検索) <br> </p> <p></p> <div class="codetitle"> <span>コードをコピー<u></u> コードは次のとおりです:</span><div class="codebody" id="code45049">#!/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><br> finditer<p>re.finditer(pattern, string[, flags])<br>finditer(string[, pos[, endpos]])<br>説明: findall と同様に、文字列内の正規表現を検索します。 すべての部分文字列式と一致するものはイテレータとして返されます。同様に RegexObject には次のものがあります: <br> </p>sub<p>re.sub(pattern, repl, string[, count, flags])<br>sub(repl, string[, count=0])<br>説明: 文字列 string All 内で一致を検索します。正規表現パターンの部分文字列は別の文字列 repl に置き換えられます。パターンに一致する文字列が見つからない場合は、変更されていない文字列が返されます。 Repl には文字列または関数を指定できます。 <br>例:<br> </p> <p></p> <div class="codetitle"> <span>コードをコピー<u></u> コードは次のとおりです:</span><div class="codebody" id="code71752"> <br>#!/usr/bin/env python<br>import re<br>p = re.compile('(one|two|three)')<br>print p.sub('num' 、「一語二語三語リンゴ」、2) <br> <p>subn<br>re.subn(pattern, repl, string[, count, flags])<br>subn(repl, string[, count=0])</p> <p>注: この関数の機能は sub() と同じですが、新しい文字列と置換の数も返します。同様に RegexObject には次のものがあります: </p> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>声明:</span><div>この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。</div></div></div><div class="nphpSytBox"><span>前の記事:<a class="dBlack" title="Python リストでの append() と extend() の使用法を共有する" href="https://m.php.cn/ja/faq/227546.html">Python リストでの append() と extend() の使用法を共有する</a></span><span>次の記事:<a class="dBlack" title="Python リストでの append() と extend() の使用法を共有する" href="https://m.php.cn/ja/faq/227551.html">Python リストでの append() と extend() の使用法を共有する</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>関連記事</h2><em><a href="https://m.php.cn/ja/article.html" class="bBlack"><i>続きを見る</i><b></b></a></em><div class="clear"></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-6t+ed+2i-1n-4w" data-ad-client="ca-pub-5902227090019525" data-ad-slot="8966999616"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><ul class="nphpXgwzList"><li><b></b><a href="https://m.php.cn/ja/faq/83938.html" title="用Python编写web API的教程" class="aBlack">用Python编写web API的教程</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/84354.html" title="在Python中操作文件之truncate()方法的使用教程" class="aBlack">在Python中操作文件之truncate()方法的使用教程</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/84828.html" title="Python random模块常用方法" class="aBlack">Python random模块常用方法</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/85807.html" title="Python and、or以及and-or语法总结" class="aBlack">Python and、or以及and-or语法总结</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/85889.html" title="把项目从Python2.x移植到Python3.x的经验总结" class="aBlack">把项目从Python2.x移植到Python3.x的经验总结</a><div class="clear"></div></li></ul></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="5027754603"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!</p></div><div class="footermid"><a href="https://m.php.cn/ja/about/us.html">私たちについて</a><a href="https://m.php.cn/ja/about/disclaimer.html">免責事項</a><a href="https://m.php.cn/ja/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body><!-- Matomo --><script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="https://tongji.php.cn/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '9']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script><!-- End Matomo Code --></html>
文法 意味 説明
"." 任意の文字
"^" 文字列の先頭 '^hello' は 'helloworld' に一致しますが、'aaaahellobbbb'
"$" 文字列の終わり 同上
"*"
0 文字以上 (貪欲一致)
<*>一致chinaunix
"+"
1 つ以上の文字 (貪欲一致)
同上
「?」
0 文字以上 (貪欲一致)
同上
*?,+?,??
上記 3 つの最初の一致結果を取得します (非貪欲一致) <*>は