Pythonでの正規表現[例付き]:実装方法は?

公開: 2021-01-29

任意のソースからの生データを処理する際、データから意味のある洞察を得ることができるように、適切な情報を抽出することが重要です。 特にテキストデータの場合、データから特定のパターンを取り出すことが困難になることがあります。

テキストデータは、調査フォーム、廃棄Webサイト、およびその他のソースを介して収集された情報の段落で構成されています。 パンダ関数または他のカスタム関数を使用してさまざまな文字列アクセサーをチャニングすることで作業を完了できますが、より具体的なパターンを取得する必要がある場合はどうでしょうか。 正規表現はこの仕事を簡単に行います。

目次

正規表現(RegEx)とは何ですか?

正規表現は、文字列の文字セットの表現です。 これは、データのプールから適切な情報を分離するのに役立つ、文字列内の特定のパターンの一般化された式を示します。 表現は通常、ルールを形成するのに役立つ記号または文字で構成されますが、一見すると、奇妙で​​理解しにくいように見える場合があります。 これらの記号には、ここで説明する関連する意味があります。

世界のトップ大学からデータサイエンスコース学びましょうエグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。

正規表現のメタ文字

  1. '。':はワイルドカードであり、単一の文字に一致します(任意の文字、ただし1回のみ)
  2. ^:文字列の開始を示します
  3. $:文字列の終わりを示します
  4. []:[]内の文字セットの1つに一致します
  5. [az]:文字a、b、…、zの範囲の1つに一致します
  6. [^ abc]:a、b、c以外の文字に一致します。
  7. a | b:aまたはbのいずれかに一致します。ここで、aとbは文字列です。
  8. ():演算子のスコープを提供します
  9. \:特殊文字のエスケープを有効にします(\ t、\ n、\ b、\。)
  10. \ b:単語の境界に一致
  11. \ d:[0-9]に相当する任意の数字
  12. \ D:[^0-9]と同等の任意の数字以外
  13. \ s:[\ t \ n \ r \ f\v]と同等の任意の空白
  14. \ S:[^ \ t \ n \ r \ f\v]と同等の非空白
  15. \ w:[a-zA-Z0-9_]と同等の任意の英数字
  16. \ W:[^a-zA-Z0-9_]と同等の英数字以外の文字
  17. '*':0個以上のオカレンスに一致します
  18. '+':1つ以上のオカレンスに一致します
  19. '?':0回または1回の出現に一致
  20. {n}:正確にn回の繰り返し、n> = 0
  21. {n、}:少なくともn回の繰り返し
  22. {、n}:最大n回の繰り返し
  23. {m、n}:少なくともm回の繰り返し、最大でn回の繰り返し

回避策を理解するための例

正規表現を構成する文字がわかったので、これがどのように機能するかを見てみましょう。

1.電子メールフィルタリング:

長い段落からすべての電子メールIDを除外したいとします。 電子メールの一般的な形式は次のとおりです。

username@domain_name。 <top_level_domain>

ユーザー名は英数字にすることができるため、\ wを使用してそれらを示すことができますが、ユーザーがfirstName.surnameとしてアカウントを作成する可能性があります。 これに取り組むために、ドットをエスケープして文字のセットを作成します。 次に、domain_nameはアルファベットのみである必要があるため、A-Za-zはそれを示します。 トップレベルドメインは通常.com、.in、.orgですが、ユースケースに応じて、アルファベット範囲全体を選択するか、特定のドメインをフィルタリングすることができます。

これの正規表現は次のようになります。

^([a-zA-Z0-9_。]+)@([a-zA-Z0-9-] +)\。([a-zA-Z] {2,4})$

ここでは、パターンの開始と終了も宣言されており、トップレベルドメインには2〜4文字しか含めることができません。 式全体には3つのグループがあります。

2.日付のフィルタリング:

抽出するテキスト情報には日付が含まれている可能性があり、個別の列を使用することはできません。 日付は、データのフィルタリングや時系列分析に役立つ重要な要素です。 特定の日付は、日付/月/年の形式を取り、日付と月は交換できます。

また、月は数字だけでなくアルファベット形式でもかまいません。アルファベットでは略語またはフルネームのいずれかです。 これは主に、データに存在するケースの数に依存し、ヒットと試行によってのみ達成できます。

さまざまな日付をカバーする単純な正規表現を以下に示します。

^(\ d {1,2})[/-](\ d {1,2})[/-](\ d {2,4})$

このパターンは、ハイフンまたはスラッシュを使用して日付形式をキャプチャします。 日付と月は1桁または2桁に制限され、年は最大40桁に制限されます。 それぞれのエンティティは、この場合はオプションのグループとしてキャプチャされます。

また読む: Pythonプロジェクトのアイデアとトピック

Pythonで実装する方法は?

作成した正規表現は、想定したそれぞれの基準を満たしているので、Pythonコードでそれらを実装します。 Pythonには、これらの式の動作を実装するremoduleという組み込みモジュールがあります。 単に、

再インポート

パターン='^(\ d {1,2})[/-](\ d {1,2})[/-](\ d {2,4})$'

Reモジュールは幅広い機能を提供し、それらすべてに異なるユースケースがあります。 重要な機能のいくつかを見てみましょう。

  1. re.findall():この関数は、渡されたパターンに基づいて、テスト文字列内のすべての一致のリストを返します。 この例を考えてみましょう。

文字列='25-12-1999ランダムテキストここに25/12/1999'

print(re.findall(pattern、string))

リスト内の文字列から日付のみを返します。

  1. re.sub():この関数のSubは置換を表し、同じことを行います。 一致したものを、提供された置換値に置き換えます。 この関数は、カウントのパターン、文字列、置換値、およびオプションのパラメーターを受け取ります。 countパラメーターは、置き換えるオカレンスの数を制御します。 デフォルトでは、それらすべてを置き換えて、新しい文字列を返します。
  2. re.split():一致したサイトで文字列を分割し、リスト内の個別の文字列としてパーツを返します。
  3. re.search():この関数は、文字列で見つかった一致と、キャプチャしたすべてのグループを含む一致オブジェクトを返します。 これらのグループを別々の列として保存する場合に便利です。

これを実行するには:

match = re.search(pattern、string)

match.group(1)

Group(0)は一致全体を返し、対応する次の番号は他のグループを示します。

チェックアウト:インドのPython開発者給与

結論

正規表現は、テキストデータのパターンをキャプチャするための強力な方法です。 さまざまな文字のコマンドを保持するのに少し余分な労力がかかる場合がありますが、複雑なユースケースでのデータ抽出のプロセスが簡素化されます。

Pythonの正規表現の例をいくつか挙げてください。

次の例は、Pythonの機能式または正規表現を示しています。
a。 メールフィルタリング
正規表現を効率的に使用して、電子メールをフィルタリングできます。 電子メールフィルタリングの通常の構文は、-^((a-zA-Z0-9 _。)+)@((a-zA-Z0-9-)+)。((a-zA-Z){2,4}です。 )$
この式は3つのグループに分けられ、ユーザー名が英数字の場合や、「first.last @」のようにドットが含まれている場合など、多くの場合に対処します。 この式は、2〜4文字を含む上位ドメインに使用されます。
b。 日付のフィルタリング
日付は、データフィルタリングを処理する際の重要な要素になる可能性があります。 扱っているテキストデータには、多くの場合、日付が含まれています。 通常のテキストからデータを抽出する正規表現またはRegExは次のとおりです-^(d {1,2})(/-)(d {1,2})(/-)(d {2,4})$
日付と月は最大2桁、月は最大4桁です。

Pythonでの正規表現の実装に関係する関数は何ですか?

Pythonでの正規表現の実装には、次の関数が関係しています。
1. re.findall()-この関数は、テキスト文字列と一致するパターンを受け入れます。 一致する文字列を返します。
2. re.sub()-「re.sub」のSubは「substitution」を表します。 このメソッドは、「re.findall()」関数とまったく同じ関数を実行します。
3. re.split()-パラメーターとして渡されるセパレーターの周りの文字列を区切ります。 セパレータは何でもかまいません。
4. re.search()-この関数は、文字列で見つかった一致を、キャプチャした他の文字列グループとともに返します。

正規表現で使用されるいくつかの特別なシーケンスは何ですか?

以下は、正規表現で使用される特別なシーケンスの一部です。
1. A:文字列が指定された文字で始まっているかどうかを確認します。
2.(スラッシュ)b:文字列が指定された文字で開始または終了するかどうかを確認します。 (文字列)/ bは開始をチェックし、(円記号)b(文字列)は終了をチェックします。
3. B:bとは正反対です。 文字列が指定された文字で始まらないかどうかを確認します。
4. d:文字列内の数値をチェックします。
5. D:数値以外の値または文字をチェックします。
6. s:空白文字をチェックします。
7. S:空白以外の文字をチェックします。
8. w:英数字をチェックします。
9. W:英数字以外の文字をチェックします。