Python RegEx: re.match()、re.search()、re.findall() と例

Pythonの正規表現とは何ですか?

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

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

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

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

Python の正規表現または RegEx は 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
  • Python に含まれる「re」モジュールは主に文字列 se に使用されますarchiNGと操作
  • ウェブページにもよく使われます。」スクレイピング」(Webサイトから大量のデータを抽出)

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

w+ および ^ 式の例

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

ここでは、コード内で w+ および ^ 式を使用する方法を示す Python RegEx の例を示します。 Python の関数 re.findall() について説明します。 later このチュートリアルでは、しばらくの間は単に \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 式

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

これが完全なコードです

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」パッケージは、入力文字列に対して実際にクエリを実行するためのメソッドをいくつか提供します。 Python の re メソッドを見ていきます。

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

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

再戦()

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

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

再戦()

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

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

search()の使い方は?

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

search() を使用する

たとえば、ここではテキスト文字列「Software」内で 99 つのリテラル文字列「Software testing」「guruXNUMX」を検索します。 テスト 楽しいです"。 「ソフトウェア テスト」の場合は一致が見つかったので、Python re.search() Example の出力が「一致が見つかりました」として返されますが、単語「guru99」の場合は文字列内に見つからなかったため、出力が「一致しませんでした」として返されます。 ”。

re.findall()

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

Python で re.findall() を使用する方法?

ここに電子メールのリストがあります。mail アドレス、そして私たちはすべての電子メールを必要とします。mail リストからアドレスを取得するには、Python の re.findall() メソッドを使用します。 すべての電子メールが見つかります。mail リストからアドレスを選択します。

Python で re.findall() を使用する

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 Regex メソッドと Regex 関数は、Flags と呼ばれるオプションの引数を受け取ります。 このフラグは、指定された Python Regex パターンの意味を変更できます。 これらを理解するために、これらのフラグの XNUMX つまたは XNUMX つの例を見てみましょう。

Python で使用されるさまざまなフラグには次のものがあります。

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

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

複数行では、パターン文字 [^] は文字列の最初の文字と各行の先頭に一致します (次のようになります)。wing 各改行の直後)。 一方、小さな「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…」に対して変数 xx を宣言しました。 キャリアグル99……セレン」
  • フラグを複数行使用せずにコードを実行すると、行からの「g」のみが出力されます。
  • フラグ「multiline」を指定してコードを実行します。「k2」を出力すると、出力は「g」、「c」、および「s」になります。
  • したがって、上の例で複数行を追加した後と追加する前の違いがわかります。

いいねwise、re.U (Unicode)、re.L (ロケールに従う)、re.X (コメントを許可) などの他の Python フラグを使用することもできます。

Python 2 の例

上記のコードは Python 3 の例です。Python 2 で実行したい場合は、以下を検討してください。wing コー​​ド。

# 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 では、正規表現は RE (RE、正規表現、または正規表現パターン) として示され、Python re モジュールを通じて埋め込まれます。

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