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

正規表現は、文字列の中で一つの「パターン」を見つけて、その「パターン」を記述することによって、複数の文字列をシンプルに表現することです。[正規表現](https://helpcenter.octoparse.jp/hc/ja/articles/360018677379-Octoparse%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%83%84%E3%83%BC%E3%83%AB)によって、パターン化をされた文字列は、pythonなどの自然言語処理で行うことができます。

 

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

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

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

 

#方法1：Excel数式  

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

 

 

 

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

 

 

#方法2：Excel VBA コード

 ![vba-code-1 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/75099c75-a49c-fd05-5669-d728ef356280.png)


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

 

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

```vb
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を選択します。
![vba-code-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/06faa661-7cae-8c80-6eef-017ce50e36cb.png)

 

 

 

#方法3：Octoparse正規表現ツール

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

 

 

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

 

 

[OctoparseにはRegExツールが組み込まれており](https://helpcenter.octoparse.jp/hc/ja/articles/360018677379-Octoparse%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%83%84%E3%83%BC%E3%83%AB)、抽出されたデータをクリーンアップするのに非常に便利です。特にプログラミングに詳しくない人にとっては、非常に便利です。 OctoparseというWebスクレイピングツールを利用すると、データの抽出、クリーニング、およびエクスポートを行うことができるようになります。

 

**ステップ1**：Octoparseアプリケーションを開く
![微信图片_20210701104553.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/8e18596c-f5e5-4b82-5f4a-32ef6404d38d.png)
![微信图片_20210701104601.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/c2d520f3-6452-4db2-7018-6cb719773772.png)

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

![微信图片_20210701104606.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/971fd9aa-699d-5744-36a3-2c6e2a31cbe1.png)


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

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

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

 

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

 



 

 

 

**関連記事**

[取得したデータを再フォーマットする](https://helpcenter.octoparse.jp/hc/ja/articles/360018604660-%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9F%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%86%8D%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%99%E3%82%8B)

 [データを再フォーマットする](https://helpcenter.octoparse.jp/hc/ja/articles/360018677379-Octoparse%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%83%84%E3%83%BC%E3%83%AB)

[PDFからExcel（エクセル）に変換する方法とソフト10選](https://www.octoparse.jp/blog/how-to-extract-pdf-into-excel/)