文書内の特定のテキストを 見つけたり、テキスト が次のような特定の形式に準拠していることを確認したりするための鍵について疑問に思ったことはありますか?電子メール アドレスとは何ですか?また、その他の同様の操作について教えてください。 このタイプの操作の鍵となるのは正規表現 (regex) です。正規表現の定義をいくつか見てみましょう。 Wikipedia では、正規表現は次のように定義されています:
検索パターンの文字列を定義します。主にパターンマッチングや文字列との文字列マッチング、つまり「検索と置換」などの操作に使用されます。この概念は 1950 年代に登場し、アメリカの数学者 Stephen Kleene が正規言語の記述を形式化し、Unix テキスト処理ユーティリティ ed (エディタ) および grep (フィルタ) で一般的に使用されるようになりました。
正規表現 (regex または略して regexp) は、検索パターンを記述するために使用される特別なテキスト文字列です。正規表現は、強化されたワイルドカードと考えることができます。ファイル マネージャーですべてのテキスト ファイルを検索するための *.txt などのワイルドカード表記に精通しているかもしれません。同等の正規表現は .*\.txt$ です。正規表現.info のもう 1 つの適切な定義は次のとおりです。
正規表現の概念はまだ少し曖昧に聞こえるかもしれません。この概念をよりよく理解するために、正規表現の例をいくつか見てみましょう。正規表現の例
このセクションでは、この概念をさらに理解するのに役立つ正規表現の例をいくつか示します。
リーリー
これは、abder
という単語のみと一致するように指示しているだけです。
この正規表現はどうでしょうか?
リーリー
a
、最後の文字がt、これらの文字の間が
n# であるテキスト パターンを検索します。 ## または r
。したがって、一致する単語は ant
と art
です。
それでは、ちょっとしたクイズを出しましょう。 ca
で始まり、次の文字
の 1 つまたはすべてで終わる正規表現を作成するにはどうすればよいですか?はい、この正規表現は次のように記述できます:
リーリー
サーカムフレックス記号 ^
で始まる正規表現がある場合は、
の後に記載されている文字列で始まる文字列と一致することを意味します。したがって、次の正規表現がある場合、This
で始まる文字列と一致します。
リーリー
したがって、次の文字列:
リーリー
正規表現
に基づいて、次の文字列が一致します:
リーリー で終わる文字列を特定の文字列
と一致させたい場合はどうすればよいでしょうか?この例では、ドル記号
を使用します。以下に例を示します:
リーリー
したがって、上記の文字列 (3 行) では、この正規表現は次のパターンと一致するために使用されます:
リーリー
それでは、この正規表現についてどう思いますか?
一見すると複雑に見えるかもしれませんが、少しずつ見ていきましょう。
サーカムフレックス
^とは何かを学習しました。これは、特定の文字列で始まる文字列と一致することを意味します。
[A-Z] は大文字を表します。したがって、正規表現のこの部分 ^[A-Z]
を読むと、大文字で始まる文字列と一致することがわかります。最後の部分 [a-z]
は、大文字で始まる文字列が見つかった場合、その後にアルファベットの小文字が続くことを意味します。
それでは、この正規表現を使用すると、次のどの文字列が一致するのでしょうか?よくわからない場合は、Python (次のセクションで説明します) を使用して答えをテストできます。
リーリー
正規表現は非常に広範なトピックであり、これらの例は、正規表現が何であるか、および正規表現を使用する理由を理解するためのものです。
RexEgg は、正規表現について詳しく学び、より多くの例を参照するのに適したリファレンスです。
Python の正規表現
さて、楽しい部分に移りましょう。上記の正規表現のいくつかを Python で使用する方法を見ていきたいと思います。 Python で正規表現を処理するために使用するモジュールは
re最初の例は、abder
という単語の検索に関するものです。 Python では、これを次のように行います:
上記の Python スクリプトを実行すると、次の出力が得られます: None
!
スクリプトは正常に動作しますが、問題は関数 match()
の動作方法です。
モジュール ドキュメントを返す場合、関数 match()
の動作は次のとおりです。
如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的匹配对象。如果字符串与模式不匹配,则返回 None;请注意,这与零长度匹配不同。
啊哈,从这里我们可以看出,match()
仅当在字符串的开头找到匹配项时才会返回结果。
我们可以使用函数 search()
,这是基于文档的:
扫描字符串,查找正则表达式模式产生匹配的第一个位置,并返回相应的匹配对象。如果字符串中没有位置与模式匹配,则返回 None;请注意,这与在字符串中的某个点查找零长度匹配不同。
因此,如果我们编写上面的脚本,但使用 search()
而不是 match()
,我们会得到以下输出:
<_sre.sre_match></_sre.sre_match>
即返回了一个匹配对象
。
如果我们想返回结果(字符串匹配),我们使用 group()
函数。如果我们想查看整个比赛,我们使用 group(0)
。因此:
打印 match_pattern.group(0)
将返回输出:Abder
。
如果我们采用上一节中的第二个正则表达式,即 /a[nr]t/
,则可以用 Python 编写如下:
import re text = 'This is a black ant' match_pattern = re.search(r'a[nr]t', text) print match_pattern.group(0)
此脚本的输出是:ant
。
文章越来越长,Python 中的正则表达式主题即使不是一本书,也肯定需要不止一篇文章。
然而,本文旨在让您快速入门并有信心进入 Python 正则表达式的世界。您可以参考 re
文档来了解有关此模块的更多信息以及如何深入了解该主题。
以上がPython の正規表現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。