我有一個電子郵件地址串列(“所有電子郵件”),我有第二個已聯系過的電子郵件串列(“已聯系”),我想創建第一個串列中存在但不存在的第三個串列在第二個(“聯系”)。我使用 REGEXMATCH 來顯示剩余電子郵件的串列,效果很好:
=ARRAYFORMULA(過濾器(A2:A,NOT(REGEXMATCH(A2:A,TEXTJOIN("|",TRUE,B2:B)))))
問題是包含 號的電子郵件未被識別為已使用,并被添加到“收件人”串列中,盡管它們出現在“已聯系”串列中。
例如,[email protected] 不會被添加到第三個串列中(正如預期的那樣),但 john [email protected] 將被添加到串列中,盡管他確實被聯系過。
這是一個例子,Col A 是“所有電子郵件” Col B 是“已聯系” Col C 是“聯系人”,我將有問題的電子郵件標記為黃色:https : //docs.google.com/spreadsheets/d/1Fesr5tjjMhruP1otVHfQXvwYtmbz2nhT4THjZulHNfw/edit# gid=0
uj5u.com熱心網友回復:
您需要轉義特殊的正則運算式元字符:
=ARRAYFORMULA(FILTER(A2:A,NOT(REGEXMATCH(A2:A,TEXTJOIN("|",TRUE,REGEXREPLACE(B2:B, "([[ $^*()\\{?.|])", "\\$1"))))))
使用REGEXREPLACE(B2:B, "([[ $^*()\\{?.|])", "\\$1"),您可以匹配和捕獲[, , $, ^, *, (, ), \, {, ?,.和|反斜杠,它們作為文字字符匹配。
要了解 RE2 正則運算式中的特殊字符,請參閱RE2 正則運算式庫檔案。
從技術上講,([[ $^*()\\{?.|])是一個正則運算式,它匹配并捕獲來自指定集合的??單個字符并將其捕獲到組 1 中作為(...)定義捕獲組。REGEXREPLACE我上面使用的命令將每個找到的匹配替換為\\$1,即一個文字反斜杠和組 1 的值。也就是說,這意味著我們在每個找到的匹配前面加上一個文字反斜杠。替換模式中的反斜杠必須加倍,因為即使在替換模式中它也是一個特殊字符($如果您需要將它用作替換模式中的文字字符,它可以轉義字符)。
uj5u.com熱心網友回復:
您還可以創建一個函式來將“ ”符號替換為另一個未用作 RegExmatch 的特殊字符的函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/399393.html
上一篇:如何在PHPCodeigniter中獲取40歲以上的人員串列
下一篇:從正則運算式組中排除一些字符
