見出し画像

正規表現でデータをフォーマットする方法3選!|メールアドレスの抽出を例とし

 正規表現は、文字列の中で一つの「パターン」を見つけて、その「パターン」を記述することによって、複数の文字列をシンプルに表現することです。正規表現によって、パターン化をされた文字列は、pythonなどの自然言語処理で行うことができます。

 例えば、ここに、メールアドレスとテキストが混在する場合は、メールアドレスだけを抽出しようと思ったら、どうすればいいでしょうか。本記事では、複数の文字列から、データをフォーマットして、メールアドレスを抽出する三つの方法を解説します。

元記事https://www.octoparse.jp/blog/regex-how-to-extract-all-email-addresses-from-txt-files-or-strings/

 正規表現はいくつかの方法があります。

方法1:Excel数式 

 =TRIM(RIGHT(SUBSTITUTE(LEFT(A1,FIND (" ",A1&" ",FIND("@",A1))-1)," ", REPT(" ",LEN(A1))),LEN(A1))).

 この数式はExcelに詳しくない人にとって、使うことが大変だと思います。一つ目は、一般的にテキストをコピーして貼り付けることができますが、Excelには順序に関して厳しいルールがあり、表現(語法)を入力しない限り、Excelはそれを受け入れません。 もう一つの問題は、長くて複雑な表現(語法)に対しては、文字列をデバッグするのは、非常に時間がかかります。

方法2:Excel VBA コード

ステップ1:「ALT + F11」キーを押すと、Microsoft VisualBasicのアプリケーションウィンドウが出てきます。

ステップ2:[挿入]> [モジュール]をクリックし、以下をコンテンツをコピーして、モジュールウィンドウに貼り付けます。

 Sub ExtractEmail()
'Update 20130829
Dim WorkRng As Range
Dim arr As Variant
Dim CharList As String
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
arr = WorkRng.Value
CheckStr = "[A-Za-z0-9._-]"
For i = 1 To UBound(arr, 1)
   For j = 1 To UBound(arr, 2)
       extractStr = arr(i, j)
       outStr = ""
       Index = 1
       Do While True
           Index1 = VBA.InStr(Index, extractStr, "@")
           getStr = ""
           If Index1 > 0 Then
               For p = Index1 - 1 To 1 Step -1
                   If Mid(extractStr, p, 1) Like CheckStr Then
                       getStr = Mid(extractStr, p, 1) & getStr
                   Else
                       Exit For
                   End If
               Next
               getStr = getStr & "@"
               For p = Index1 + 1 To Len(extractStr)
                   If Mid(extractStr, p, 1) Like CheckStr Then
                       getStr = getStr & Mid(extractStr, p, 1)
                   Else
                       Exit For
                   End If
               Next
               Index = Index1 + 1
               If outStr = "" Then
                   outStr = getStr
               Else
                   outStr = outStr & Chr(10) & getStr
               End If
           Else
               Exit Do
           End If
       Loop
       arr(i, j) = outStr
   Next
Next
WorkRng.Value = arr
End Sub

ステップ3:「OK」をクリックして、プロセスを実行します

ステップ4:上記のコードに適用する範囲を選択します。この場合はA1:A4を選択します。

方法3:Octoparse正規表現ツール

 以上の二つ方法はプログラミングの知識がないと、正規表現の習得と使いは難しいです。でも、下記の簡単な表現を直接に使用すると、メールアドレスも抽出することができます。

   [a-zA-Z0-9-_]{1,}@[a-zA-Z0-9-_]{1,}.[a-zA-Z]{1,}

 OctoparseにはRegExツールが組み込まれており、抽出されたデータをクリーンアップするのに非常に便利です。特にプログラミングに詳しくない人にとっては、非常に便利です。 OctoparseというWebスクレイピングツールを利用すると、データの抽出、クリーニング、およびエクスポートを行うことができるようになります。

ステップ1:Octoparseアプリケーションを開く

ステップ2:ソーステキストの文字列をコピーします。


ステップ3:[正規表現]ボックスに式をコピーして貼り付けます。

     [a-zA-Z0-9-_]{1,}@[a-zA-Z0-9-_]{1,}.[a-zA-Z]{1,}

ステップ4:下の[すべてにマッチ]を選択し、[マッチング]をクリックします。

 以上の手順に従って、メールアドレスを抽出しました。

関連記事:


この記事が気に入ったらサポートをしてみませんか?