LoginSignup
0
1

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-07-01

正規表現は、文字列の中で一つの「パターン」を見つけて、その「パターン」を記述することによって、複数の文字列をシンプルに表現することです。正規表現によって、パターン化をされた文字列は、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

ステップ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を選択します。
vba-code-4.png

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

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

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

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

ステップ1:Octoparseアプリケーションを開く
微信图片_20210701104553.png
微信图片_20210701104601.png

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

微信图片_20210701104606.png

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

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

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

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

関連記事

取得したデータを再フォーマットする

データを再フォーマットする

PDFからExcel(エクセル)に変換する方法とソフト10選

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1