从Excel的分隔字符串中提取单词?

5

我需要提取分号之间带有 "@" 标志的特定单词,这些单词包含电子邮件地址。

以下是一个例子:

A1 >> james john;Paris street;p.o. box:12345;tel.987654321;username@site.com;usa
B1 >> david eric;34th street;tel.543212345;name@web.net;canada;ottawa

请注意,电子邮件没有特定的位置,它可以出现在任何地方。此外,除了“@”之外,没有常见的单词或字符,因此必须有一个公式来选择分号+包含“@”以提取电子邮件并将其放入A2、B2等单元格中。
5个回答

3
B1        =FIND("@",A1)
C1        =IF(ISERR(FIND(";",A1,B1)),LEN(A1)+1,FIND(";",A1,B1))
D1        =MAX(IF(ISERR(FIND(";",LEFT(A1,C1-1),ROW(INDIRECT("A1:A"&B1)))),0,FIND(";",LEFT(A1,C1-1),ROW(INDIRECT("A1:A"&B1)))))
E1        =MID(A1,D1+1,C1-D1-1)

如果您愿意,您可以将它们组合成一个超级公式。
B1 = the location of the at sign
C1 = the first semicolon after the @
D1 = the semicolon before the at sign (array entered)

2
将数据复制到列A
选择数据。
Data -> 文本拆分...
分隔符 (下一步 >)
分号
完成 现在您的数据已经在列A-F中。
G1输入:
=INDEX(A1:F1,1,MATCH("~",IF(ISNUMBER(FIND("@",A1:F1)),A1:F1),-1))

按下Ctrl+Shift+Enter。向下拖动公式。


1
这是一个使用正则表达式的VBA函数:
Function EmailFrom(source As String)

Dim Matches As Object

    With CreateObject("VBScript.RegExp")

        .Pattern = "(^|;)([^;@]+@[^;@]+);?"

        If .Test(source) Then
            Set Matches = .Execute(source)
            EmailFrom = Matches(0).SubMatches(1)
        Else
            EmailFrom = CVErr(xlErrNA)
        End If

    End With

End Function

[更新] 或者(简洁)

Function EmailFrom(source As String)

    With CreateObject("VBScript.RegExp")
        .Pattern = "(^|;)([^;@]+@[^;@]+);?"
        With .Execute(source)
            If .Count > 0 Then
                EmailFrom = .Item(0).SubMatches(1)
            Else
                EmailFrom = CVErr(xlErrNA)
            End If
        End With
    End With

End Function

为什么要运行两次正则表达式(“Test”和“Execute”)?只执行一次并检查“Matches.Count>0”不就足够了吗? - GSerg
@GSerg - 有道理,谢谢。实际上,显式的Matches对象也可以通过使用With...End With块来替换。已更新。 - Mike Woodhouse

0

有一个简单的分隔表达式,可以帮助您在特定的断点处分解字符串。在这种情况下,分号是您想要中断字符串的地方。 您需要做的就是在顶部菜单中单击“数据”,然后选择包含数据的列,然后选择“文本到列”选项卡。 它将在您指定的中断符处拆分数据,在您的情况下,它是分号,您想要将数据拆分。

我试图发布屏幕截图以帮助,但是此网站的垃圾邮件检测器不允许我这样做。 但是您始终可以访问我的个人主页http://nikhilchandra.hubpages.com/以获取同样的信息。 我希望这会有所帮助:-)


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接