在Google电子表格中找到了一个数据库。有许多独特的单元格包含多个电子邮件。
我试图使用=Regexextract(E2;"[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}")
提取它们,但它只提取列表中的第一封电子邮件。
以下是工作表的截图:
有关如何提取所有内容的任何线索?
答案 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:
替换为子模式中捕获的内容