iT邦幫忙

0

RegEx:如何從TXT文件或字符串中提取所有電子郵件地址

現在,您有一個混合了電子郵件地址和文本字符串的文本文件,並且您想要提取電子郵件地址。 在本文中,我將向您展示如何使用正則表達式從TXT文件或字符串中提取所有電子郵件地址。

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

如果您很難使用Excel,這個公式很令人沮喪。 Excel對訂單有嚴格的規定。 通常情況下,您複製並粘貼複雜的公式,但Excel不會接受它,除非您在單元格中鍵入表達式。 與Excel公式相關的另一個問題是您必須花費一定的時間來調試快速,特別是長的快速。

選項2,Excel VBA代碼。
vba-code-1

1.按ALT + F11鍵,這將帶您進入Microsoft Visual Basic for Application窗口

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.選擇要應用於上述代碼的範圍。 在這種情況下,範圍A1:A4
4.按確定繼續該過程。

vba-code-4

選項3:正則表達式

如果您沒有任何編程知識,那麼正則表達式很難學習。 但是,您可以應用此一個簡單表達式來過濾電子郵件地址。
[a-zA-Z0-9-]{1,}@[a-zA-Z0-9-]{1,}.[a-zA-Z]{1,}

Octoparse具有內置的RegEx工具,非常方便人們清理提取的數據。 特別是對於非IT專業人員來說,這是一個額外的獎勵,你不必花時間學習python來清理數據。 使用Octoparse網絡抓取工具,現在可以進行數據提取,清潔和導出一體化。

regex-tool

1.打開Octoparse應用程序

2.在源文本處複製文本字符串。 例如,在這種情況下,文本字符串是:

此電子郵件地址有效:web@email.net,此電子郵件地址不是有效的web @ email。 與what_ever@public.com相同的是有效的電子郵件地址和地址test @ test。 無效! OCTOPARSE@test.com也有效

3.將表達式複制並粘貼到“正則表達式”框中。

4.選擇底部的“全部匹配”選項,然後單擊“匹配”。

media


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
Ryan
iT邦新手 4 級 ‧ 2019-08-06 15:34:55

以前有用.net寫過類似的功能,不過那是在抓特定的日期。

0
erika
iT邦新手 5 級 ‧ 2019-08-16 17:17:56

我沒有試過,可以詳細解釋一下嗎?

我要留言

立即登入留言