Google电子表格上的Regexextract问题

时间:2016-02-01 19:23:00

标签: regex google-sheets

在Google电子表格中找到了一个数据库。有许多独特的单元格包含多个电子邮件。 我试图使用=Regexextract(E2;"[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}")提取它们,但它只提取列表中的第一封电子邮件。

以下是工作表的截图:

enter image description here

有关如何提取所有内容的任何线索?

3 个答案:

答案 0 :(得分:0)

看起来regexextract无法提取重复的匹配。

这是一种解决方法:

=arrayformula(iferror(REGEXEXTRACT(split(REGEXREPLACE(A1,"\s+",";"),";"),"(\w+@\w+\.\w+)")))

,其中

  • REGEXREPLACE(A1,"\s+",";")用;
  • 替换所有空格(包括换行符)
  • split(REGEXREPLACE(...),";")将其转换为数组
  • REGEXEXTRACT(split(...),(\w+@\w+\.\w+)")提取电子邮件地址
  • iferror(REGEXEXTRACT(...))如果没有匹配则返回任何内容
  • arrayformula(iferror(...))确保iferror(REGEXEXTRACT(...))可以处理由split()
  • 创建的数组

您没有指定结果的显示方式。如果您想要以逗号分隔的列表,请执行join(",", result)

答案 1 :(得分:0)

如果数据始终如下所示,那么最简单的就是:

=SPLIT(A1,CHAR(10))

这有效地将使用换行符作为分隔符的所有电子邮件分开。

如果您仍想使用正则表达式,可以尝试以下步骤,根据单元格中的电子邮件数量动态创建捕获组:

=REGEXEXTRACT(A1,REPT("\n?(\w+@\w+\.\w+)",COUNTA(SPLIT(A1,"@"))-1))

答案 2 :(得分:-1)

尝试REGEXREPLACE"使用正则表达式替换不同文本字符串的部分文本字符串"

=REGEXREPLACE(E2;"([A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4})";"$1")

<强>其中:

():捕获小组

$1:替换为子模式中捕获的内容