【问题标题】:using regexreplace in sheets to join elements with a comma在工作表中使用 regexreplace 以逗号连接元素
【发布时间】:2020-07-03 01:27:41
【问题描述】:

我想用逗号连接几个单词,而不是用逗号连接单元格中的单词。

例如,来自包含:

的单元格
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, , , 日历, , , , , , , , , , ,

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

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

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

不过,结果并不完美,因为我明白了: , 床单, 日历, , 床单, gmail, 、gmail、日历、

我使用了两次正则表达式替换公式。 顺便说一句,我可以使用 join 或 textjoin 来完成,但它不适用于整个列的 arrayformula,所以它不合适。

我认为使用 () 来捕获元素是可能的,但我知道有些人在这个正则表达式方面是真正的专家!

你有什么想法吗?

【问题讨论】:

    标签: regex google-sheets


    【解决方案1】:

    你可以使用

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

    注意事项

    • REGEXREPLACE(A2:A, "(?si)(sheets|calendar|gmail)?.?", "$1 ") - 这会将不是sheetscalendargmail 子字符串的起点的每个字符替换为空格,如果找到这些字符序列,则会放回它们
    • TRIM(...) 将从上述REGEXREPLACE 的结果中去除前导/尾随空格
    • REGEXREPLACE(..., "\s+", ",") 将用一个逗号替换 1+ 个空格字符的块。

    【讨论】:

    • 这真是太棒了!非常感谢您的这些解释!顺便说一句,有没有办法纠正一些措辞,例如如果有人写“sheet”,我想返回“sheets”,如果是“doc”,那么“docs”:=ARRAYFORMULA(REGEXREPLACE(TRIM(REGEXREPLACE (A2:A, "(?si)(sheets?|calendar|gmail|docs?)?.?", "$1 ")), "\s+", ",")) 我记得单词分组的用法() 和 $# 但我仍在努力使用它们。也许需要一个额外的步骤......
    • @FGS 您将需要另一个步骤,因为 RE2 正则表达式库不支持条件替换模式。此外,doc 字符串中没有s,所以我们甚至无法在这里找到任何解决方法。
    猜你喜欢
    • 2021-07-06
    • 2011-11-04
    • 2018-01-29
    • 1970-01-01
    • 2021-08-04
    • 2020-04-13
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    相关资源
    最近更新 更多