代码之家  ›  专栏  ›  技术社区  ›  John Beasley

从专栏中提取电子邮件

  •  0
  • John Beasley  · 技术社区  · 4 年前

    尝试使用以下公式从excel工作表中的列中提取电子邮件:

    =TRIM(MID(SUBSTITUTE(" "&$A1&" "," ",REPT(" ",40)),
     FIND(REPT("@",COLUMNS($A1:A1)),SUBSTITUTE
     (SUBSTITUTE(" "&$A1&" "," ",REPT(" ",40)),"@",REPT("@",COLUMNS($A1:A1)),COLUMNS($A1:A1)))-40,80)) 
    

    这个公式在很大程度上是有效的,但是一些记录中仍然包含其他文本。

    例如,其中一条记录如下所示:

    **TEST** John Beasley,jbeasley@usa.com,7575551212
    

    使用上述公式后,我得到以下结果:

    Beasley,jbeasley@usa.com,7575551212
    

    下面是另一个例子:

    USA-USA/J Beasley/jbeasley@usa.com/757-555-1212
    

    使用公式后的结果:

    Beasley/jbeasley@usa.com/757-555-1212
    

    以下是公式何时起作用的示例(之前):

    **US AMA TES DATA** John Beasley, jbeasley@usa.com
    

    结果如下:

    jbeasley@usa.com
    

    所以这个公式是有效的,但它也不起作用。

    我如何编写公式,以便它提取除实际电子邮件地址之外的所有内容?

    1 回复  |  直到 4 年前
        1
  •  1
  •   Scott Craner    4 年前

    如果有,请使用FILTERXML:

    =FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(A1,"/",","),",","</s><s>")&"</s></t>","//s[contains(.,'@')]")
    

    FILTERXML是在Excel 2013中引入的,仅在PC机上,而不是Mac上。

    enter image description here

    如果没有FILTERXML,我们可以使用:

    =TRIM(MID(SUBSTITUTE(SUBSTITUTE(A1,"/",","),",",REPT(" ",999)),FIND("@",SUBSTITUTE(SUBSTITUTE(A1,"/",","),",",REPT(" ",999)))-500,999))
    

    enter image description here