2016-02-01 168 views
0

在Google電子表格中有數據庫。有很多獨特的單元格包含多個電子郵件。 我試圖使用=Regexextract(E2;"[A-z0-9._%+-][email protected][A-z0-9.-]+\.[A-z]{2,4}")來提取它們,但它僅提取列表中的第一封電子郵件。Google電子表格中的Regexextract問題

這裏是片的截圖:

enter image description here

關於如何做到這一點,以提取所有的人任何線索?

+0

看到我的回答如下 - 這有效地提取所有這些 –

+0

的這個問題是跨發佈到其他網站:[1]。 http://es.stackoverflow.com/q/3496/65,[2]。 https://productforums.google.com/forum/#!topic/docs-es/vgnWpwFT5g4。正如在1中提到的那樣,交叉本身並不壞,但這應該作爲對其他人的禮貌來提及,特別是當問題的內容是其他帖子的重複/翻譯時。 –

+0

我下調了這個問題,因爲在[2]中有一個後續帖子,其中OP表示電子郵件地址被包含在文本塊中,並且這篇文章中包含的圖片沒有顯示。 –

回答

0

看起來像regexextract無法提取重複的匹配項。

這裏是一個解決方法:

=arrayformula(iferror(REGEXEXTRACT(split(REGEXREPLACE(A1,"\s+",";"),";"),"(\[email protected]\w+\.\w+)"))) 

其中

  • REGEXREPLACE(A1,"\s+",";")替換所有位(包括換行符)用;
  • split(REGEXREPLACE(...),";")將其轉換爲一個數組
  • REGEXEXTRACT(split(...),(\[email protected]\w+\.\w+)")提取電子郵件地址
  • iferror(REGEXEXTRACT(...))回報什麼,如果沒有匹配
  • arrayformula(iferror(...))確保iferror(REGEXEXTRACT(...))可以通過split()

您處理創建數組沒有指定如何顯示結果。如果你想有一個逗號分隔的列表,請join(",", result)

0

如果數據一致看起來像你顯示的例子 - 最簡單的是:

=SPLIT(A1,CHAR(10)) 

這有效地打出使用換行符作爲分隔符的所有電子郵件。

如果你還是想用正則表達式,可以動態地嘗試這種創建基於電子郵件的細胞數量捕捉組:

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

嘗試REGEXREPLACE「用不同的替換文本字符串的一部分使用正則表達式」

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

文本字符串,其中:

():捕獲組

$1:與子模式拍攝的內容替換

+1

只返回相同的字符串,它根本不會分割出電子郵件地址 –