在工作表中使用regexreplace以逗号分隔元素

时间:2020-07-02 10:43:05

标签: regex google-sheets

我想用逗号连接几个单词,而用逗号将它们在单元格中找不到。

例如,从包含的单元格中

i want to use sheets to create events in calendar through gmail.

我想要这个输出: 床单,Gmail,日历

我尝试过这样的正则表达式:

=ArrayFormula(IFERROR(REGEXREPLACE(LOWER(A2:A);"(.)?(sheets|calendar|gmail)?";"$2, "))))"

但是我得到这样的各种结果: ,,,工作表,,,,,,,,日历,,,,,, ,,工作表,,,,,,,,, ,,,,,,,,,,,日历,,,,,,,,,,

我想知道如何像这样清洁它: 床单,日历 床单,gmail gmail,日历

摆脱之前和之后的无用逗号 到目前为止,使用更复杂的公式,我可以得到:

=ArrayFormula(IFERROR(REGEXREPLACE(REGEXREPLACE(MINUSCULE(A2:A);"(.)?(sheets|calendar|gmail)";"$2, ");"(, )+";", ")))

不过,结果还是不完美,因为我得到了: ,工作表,日历, ,工作表,gmail, ,gmail,日历,

我正在使用两次regexreplace公式。 顺便说一句,我可以使用join或textjoin来做到这一点,但是它不适用于整个列的arrayformula,因此不合适。

我认为使用()捕获元素是可能的,但是我知道其中一些是真正的正则表达式专家!

你有个主意吗?

1 个答案:

答案 0 :(得分:1)

您可以使用

=ARRAYFORMULA(REGEXREPLACE(TRIM(REGEXREPLACE(A2:A, "(?si)(sheets|calendar|gmail)?.?", "$1 ")), "\s+", ","))

注释

  • REGEXREPLACE(A2:A, "(?si)(sheets|calendar|gmail)?.?", "$1 ")-这将用空格代替不是sheetscalendargmail子字符串起点的每个字符,并放回这些char序列如果找到了
  • TRIM(...)将从以上REGEXREPLACE的结果中去除开头/结尾的空白
  • REGEXREPLACE(..., "\s+", ",")将用单个逗号替换1个或多个空格字符。