从 Excel/Google 电子表格中的文本字符串中提取电子邮件

从 Excel/Google 电子表格中的文本字符串中提取电子邮件

我希望从 Google Docs/Excel 中的文本字符串中提取电子邮件地址并自动发送电子邮件,其中单元格的内容目前未知(直到用户更新)。

例如,他们可能会读到:

  1. 你好,

    我的朋友[电子邮件保护]

    谢谢,

    例子乔

或者

  1. 你应该问

    [电子邮件保护]

我现在得到了这个公式:

=IFERROR((LEFT(CELL,FIND("@",CELL)-1))&"@"&(regexextract(CELL,"@(.*)"))) 

它适用于几乎所有情况,除了

a) 如示例 1 所示,有人在电子邮件末尾添加 , 或 .

b) 如示例 2 中所示,电子邮件从新行开始,形式为例如。

[电子邮件保护]

我该如何调整公式来纠正这些问题?

答案1

对于 Google 电子表格

Google 电子表格有这些很酷的内置正则表达式公式

我们使用第一个公式来提取邮件地址。将此公式放入 Google 电子表格单元格中:

=iferror(Regexextract(A1;"[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}");"")

在此处输入图片描述

正则表达式模式如何工作?

[A-z0-9._%+-]+@[A-z0-9.-]+.[Az]{2,4}

  • A-zA表示介于 an和 a之间的任意字符z
    注意大小写。这样就不区分大小写
  • 0-9代表任意数字
  • ._%+-本身就代表这些符号
  • [ ]表示允许在括号内出现的单个字符
  • 把符号放在+后面[ ]可以让之前的模式无限重复
  • @没有特殊含义。它实际上是在寻找一个@标志
  • [A-z0-9.-]+与上文相同。但这次_%+不允许在标志后面@
  • \.搜索单个点。它必须用前面的转义,\因为.占位符通常是任意字符
  • 最后[A-z]{2,4}搜索 2、3 或 4 个不区分大小写的字符

使用的资源

答案2

这是用于 Excel 的。

考虑以下用户定义函数(UDF):

Public Function GetEmailAddy(Sin As String) As String
    Dim s As String
    If InStr(1, Sin, "@") = 0 Then
        GetEmailAddy = ""
        Exit Function
    End If

    s = Replace(Sin, Chr(10), " ")
    s = Replace(s, Chr(13), " ")
    s = Application.WorksheetFunction.Trim(s)
    ary = Split(s, " ")

    For Each a In ary
        If InStr(1, a, "@") > 0 Then
            GetEmailAddy = a
            Exit Function
        End If
    Next a
End Function

用户定义函数 (UDF) 非常容易安装和使用:

  1. ALT-F11 打开 VBE 窗口
  2. ALT-I ALT-M 打开新模块
  3. 粘贴内容并关闭 VBE 窗口

如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 之后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx

要删除 UDF:

  1. 调出如上所示的 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

要从 Excel 使用 UDF:

=GetEmailAddy(A1)

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

有关 UDF 的详细信息,请参阅:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

必须启用宏才能使其工作!

这里有些例子:

在此处输入图片描述

相关内容