Python 正規表現: re.match()、re.search()、re.findall() と例

正規表現とは Python?

A 正規表現 (RE) プログラミング言語では、検索パターンを記述するために使用される特別なテキスト文字列です。 コード、ファイル、ログ、スプレッドシート、さらにはドキュメントなどのテキストから情報を抽出するのに非常に役立ちます。

を使用して Python 正規表現で最初に認識すべきことは、すべてが本質的に文字であり、文字列とも呼ばれる特定の文字シーケンスに一致するパターンを記述しているということです。ASCII またはラテン文字はキーボード上にある文字であり、Unicode は外国語のテキストに一致するために使用されます。これには、数字、句読点、$#@!% などのすべての特殊文字が含まれます。

例えば、 Python 正規表現は、文字列から特定のテキストを検索し、それに応じて結果を出力するようにプログラムに指示することができます。式には以下を含めることができます。

  • テキストマッチング
  • 繰り返し
  • 分岐
  • 柄構成など

正規表現またはRegEx Python RE(RE、正規表現、または正規表現パターン)として表され、 再モジュール. Python ライブラリを通じて正規表現をサポートします。 Python さまざまなものをサポートしています 修飾子、識別子、および空白文字.

識別子 修飾子 空白文字 エスケープが必要です
\d= 任意の数字 (数字) \d は数字を表します。例: \d{1,5} は、1,5 などの 424,444,545 の間の数字を宣言します。 \n = 改行 。 + * ? [] $ ^ () {} | \
\D= 数字以外 (数字以外) + = 1 つ以上に一致します \s= スペース
\s = スペース
(タブ、スペース、改行など)
? = 0 または 1 に一致します \t =タブ
\S= スペース以外のもの * = 0 以上 \e = 逃げる
\w = 文字 (「_」を含む英数字と一致) $ 文字列の末尾に一致 \r = キャリッジリターン
\W = 文字以外のすべて (「_」を除く英数字以外の文字と一致します) ^ 文字列の先頭と一致する \f= フォーム フィード
。 = 文字(ピリオド)以外のもの | または x/y のいずれかに一致します ------
\b = 改行を除く任意の文字 [] = 範囲または「分散」 ------
\. {x} = 前述のコードの量 ------

正規表現(RE)の構文

import re
  • 「re」モジュール付属 Python 主に文字列の検索と操作に使用されます
  • ウェブページにもよく使われます。」スクレイピング」(Webサイトから大量のデータを抽出)

式 (w+) と (^) を使用するこの簡単な演習から式チュートリアルを開始します。

w+ および ^ 式の例

  • 「^」: この式は文字列の先頭と一致します
  • 「w+“: この式は文字列内の英数字と一致します。

ここでは、 Python 正規表現コードでw+と^式を使用する方法の例。関数re.findall()については、 Pythonについてはこのチュートリアルの後半で説明しますが、しばらくの間は \w+ と \^ の式に焦点を当てます。

たとえば、文字列「guru99, education is fun」の場合、w+ と ^ を使用してコードを実行すると、出力は「guru99」になります。

w+ および ^ 式の例

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print(r1)

w+ から +sign を削除すると、出力が変更され、最初の文字の最初の文字、つまり [g] のみが表示されることに注意してください。

re.split 関数の \s 式の例

  • 「s」: この式は文字列内にスペースを作成するために使用されます。

この正規表現がどのように Python 作品を作るには、まずはシンプルな Python 正規表現の分割関数の例。この例では、「re.split」関数を使用して各単語を分割し、同時に文字列内の各単語を個別に解析できる式 \s を使用しています。

re.split 関数の \s 式

このコードを実行すると、出力 ['we', 'are', 'splitting', 'the', 'words'] が得られます。

では、s から「\」を削除するとどうなるかを見てみましょう。 出力にはアルファベットの「s」がありません。これは、文字列から「\」を削除し、「s」を通常の文字として評価し、文字列内で「s」が見つかった場所で単語を分割するためです。

re.split 関数の \s 式

同様に、他のシリーズもあります Python さまざまな方法で使用できる正規表現 Python \d、\D、$、\.、\b など。

これが完全なコードです

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print((re.split(r'\s','we are splitting the words')))
print((re.split(r's','split the words')))

次に、正規表現で使用されるメソッドの種類を見ていきます。 Python.

正規表現メソッドの使用

「re」パッケージは、入力文字列に対して実際にクエリを実行するためのいくつかのメソッドを提供します。reのメソッドについては、 Python:

  • 再戦()
  • 研究()
  • re.findall()

注意: 正規表現に基づいて、 Python 2 つの異なる基本操作を提供します。match メソッドは文字列の先頭のみの一致をチェックしますが、search メソッドは文字列内の任意の場所での一致をチェックします。

再戦()

再戦() re の機能 Python 正規表現パターンを検索し、最初の出現を返します。 Python RegEx Matchメソッドは文字列の先頭のみ一致をチェックします。したがって、最初の行に一致が見つかった場合は、一致オブジェクトを返します。しかし、他の行に一致が見つかった場合は、 Python RegEx Match 関数は null を返します。

例えば、次のコードを考えてみましょう。 Python re.match() 関数。式「w+」と「\W」は文字「g」で始まる単語に一致し、それ以降は「g」で始まらないものは識別されません。リストまたは文字列の各要素の一致を確認するには、このforループを実行します。 Python re.match() の例。

再戦()

re.search(): テキスト内のパターンの検索

研究() 関数は正規表現パターンを検索し、最初の出現を返します。 Python re.match()は、入力文字列のすべての行をチェックします。 Python re.search() 関数は、パターンが見つかった場合は一致オブジェクトを返し、パターンが見つからない場合は「null」を返します。

search()の使い方は?

search()関数を使用するには、インポートする必要があります Python まずモジュールを再読み込みしてからコードを実行します。 Python re.search()関数は、メイン文字列からスキャンする「パターン」と「テキスト」を受け取ります。

search() を使用する

たとえば、ここではテキスト文字列「Software」内で 99 つのリテラル文字列「Software testing」「guruXNUMX」を検索します。 テスト 「ソフトウェアテスト」では一致が見つかったので、次の出力を返します。 Python re.search() の例では「一致するものが見つかりました」と表示されますが、「guru99」という単語は文字列内に見つからなかったので、「一致するものなし」という出力が返されます。

re.findall()

findall() モジュールは、指定されたパターンに一致する「すべて」の出現を検索するために使用されます。 対照的に、search() モジュールは、指定されたパターンに一致する最初の出現のみを返します。 findall() はファイルのすべての行を反復処理し、単一のステップでパターンの重複しない一致をすべて返します。

re.findall()の使い方 Python?

ここでは電子メールアドレスのリストがあり、リストからすべての電子メールアドレスを取得したいので、re.findall()メソッドを使用します。 Pythonリストからすべての電子メール アドレスが検索されます。

re.findall() を使用する Python

re.findall() の例の完全なコードは次のとおりです。

import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print((z.groups()))
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ')
    if re.search(pattern, text):
        print('found a match!')
else:
    print('no match')
abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print(email)

Python フラグ

その他にもたくさんのグーグルの Python 正規表現メソッドと正規表現関数は、フラグと呼ばれるオプションの引数を取ります。このフラグは、指定された正規表現の意味を変更することができます。 Python 正規表現パターン。これらを理解するために、これらのフラグの例を 1 つまたは 2 つ見てみましょう。

使用されるさまざまな旗 Python 含ま

正規表現フラグの構文 この旗は何をするのですか
[レム] 各行の開始/終了を考慮する
[re.I] 大文字と小文字は区別されません
[レス] 作る [ 。 】
[re.U] { \w,\W,\b,\B} を Unicode ルールに従うようにします
[リエル] {\w,\W,\b,\B} をロケールに従わせる
[re.X] 正規表現でのコメントを許可する

re.M または複数行フラグの例

マルチラインでは、パターン文字 [^] は文字列の最初の文字と各行の先頭 (各改行の直後) に一致します。式の小さな「w」は、スペースを文字でマークするために使用されます。コードを実行すると、最初の変数「k1」は単語 guru99 の文字 'g' のみを出力しますが、マルチライン フラグを追加すると、文字列内のすべての要素の最初の文字を取得します。

re.M または複数行フラグの例

これがコードです

import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print(k1)
print(k2)
  • 文字列「guru99…. careerguru99….selenium」の変数xxを宣言しました。
  • フラグを複数行使用せずにコードを実行すると、行からの「g」のみが出力されます。
  • フラグ「multiline」を指定してコードを実行します。「k2」を出力すると、出力は「g」、「c」、および「s」になります。
  • したがって、上の例で複数行を追加した後と追加する前の違いがわかります。

同様に、他の Python re.U (Unicode)、re.L (ロケールに従う)、re.X (コメントを許可する) などのフラグ。

Python 2例

上記のコードは Python 3つの例、実行したい場合 Python 2 次のコードを検討してください。

# Example of w+ and ^ Expression
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print r1

# Example of \s expression in re.split function
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print (re.split(r'\s','we are splitting the words'))
print (re.split(r's','split the words'))

# Using re.findall for text
import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print(z.groups())
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print 'Looking for "%s" in "%s" ->' % (pattern, text),
    if re.search(pattern, text):
        print 'found a match!'
else:
    print 'no match'
abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print email

# Example of re.M or Multiline Flags
import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print k1
print k2

あなたのテスト Python 知識

1. 文字列内のパターンのすべての出現を検索するにはどの方法を使用しますか?

  • 研究()
  • 再戦()
  • re.findall()
  • 再分割()
re.findall() は、文字列内のパターンのすべての出現を検索するために使用されます。

2. 正規表現において \d 文字クラスは何を表しますか?

  • 任意の数字(0~9)
  • 数字以外の文字
  • 任意の空白文字
  • 任意の文字または数字
\d は任意の数字 (0 ~ 9) を表します。

3. スペースに基づいて文字列を分割するにはどの関数を使用しますか?

  • re.split(r'\s', 文字列)
  • re.findall(r'\w+', 文字列)
  • re.match(r'\s+', 文字列)
  • re.split(r'\w+', 文字列)
re.split(r'\s', string) は、\s 式を使用してスペースに基づいて文字列を分割します。

4. re.match() と re.search() の主な違いは何ですか?

  • re.match() は文字列の先頭でパターンを検索しますが、re.search() は文字列内の任意の場所でパターンを検索します。
  • re.match() はすべての一致を返しますが、re.search() は最初の一致を返します。
  • re.search() は re.match() よりも高速です。
  • 両方の関数は同じように動作します。
re.match() は文字列の先頭でパターンを検索しますが、re.search() は文字列内の任意の場所でパターンを検索します。

まとめ

の正規表現 プログラミング言語 は、検索パターンを記述するために使用される特別なテキスト文字列です。 数字、句読点、$#@!% などのすべての特殊文字が含まれます。式にはリテラルを含めることができます

  • テキストマッチング
  • 繰り返し
  • 分岐
  • 柄構成など

In Python正規表現はRE(RE、regex、またはregexパターン)として表され、 Python 再モジュール。

  • 「re」モジュール付属 Python 主に文字列の検索と操作に使用されます
  • Webページの「スクレイピング」(Webサイトから大量のデータを抽出する)にもよく使われます。
  • 正規表現メソッドには次のものがあります。 re.match()、re.search()、re.findall()
  • その他 Python 正規表現の置換メソッドはsub()とsubn()で、正規表現内の一致する文字列を置換するために使用されます。
  • Python フラグ その他にもたくさんのグーグルの Python 正規表現メソッドと正規表現関数は、フラグと呼ばれるオプションの引数を取ります。
  • このフラグは、指定された正規表現パターンの意味を変更できます。
  • さまざまな Python 正規表現メソッドで使用されるフラグは re.M、re.I、re.S などです。