【问题标题】:Combine REGEXREPLACE and CONCAT into the same formula in Google Sheets将 REGEXREPLACE 和 CONCAT 合并到 Google 表格中的相同公式中
【发布时间】:2018-05-28 08:35:29
【问题描述】:

我有两个公式需要合并为一个。但我收到一个计算错误:“IF 的参数数量错误。预计有 2 到 3 个参数,但收到了 4 个参数。

这是第一个公式

=REGEXREPLACE(A4, "(/[^/]+)(?:/\?[^/]*)?$", "$1/")

这是第二个公式

=ARRAYFORMULA(IF(ISBLANK(B2:B),"",(CONCAT(B2:B,"?tag=ukos-20"))))

这是我的尝试

=ARRAYFORMULA(IF(ISBLANK(B2:B),"",(REGEXREPLACE(B2:B, "(/[^/]+)(?:/\?[^/]*)?$", "$1/")),(CONCAT(B2:B,"?tag=ukos-20"))))

下面是an example in a Google Sheet,如果需要可以用File-> Make a Copy复制。

所以我们在行上执行正则表达式,然后将结果传递给 concat,concat 将标签附加到 URL。

【问题讨论】:

  • 如果单元格为空白,您是否只是想将单元格中的值保留为空白?试试=IF(ISBLANK(B4),"",CONCAT(REGEXREPLACE(B4, "(/[^/]+)(?:/\?[^/]*)?$", "$1/"),"?tag=ukos-20"))
  • "如果该行为空白,则不返回任何内容。否则,删除最后 / 之后的任何内容并始终确保最终 / 存在。然后将以下字符串追加(concat)到 REGEXREPLACE 的输出中?标签=ukos-20'"
  • 函数本身有效,但模式与字符串不匹配。你确定ref=之前没有?吗?看起来 =ARRAYFORMULA(IF(ISBLANK(B2:B),"",CONCAT(REGEXREPLACE(B2:B, "(/[^/]+)(?:/\?[^/]*)?$", "$1/"),"?tag=ukos-20"))) 作品授予您的 URL 包含有效的查询字符串。可能,如果您希望同时支持?key=valueref=value 类型的结尾,则需要使用"(/[^/]+)(?:/(?:\?|ref=)[^/]*)?$" 正则表达式。
  • 所以,合并2个函数不是问题。要么是输入问题,要么是正则表达式问题。
  • 我看到您正在使用我建议的正则表达式修复。我要发布答案吗?

标签: javascript regex excel google-sheets concatenation


【解决方案1】:

在这里,您希望同时支持 ?key=valueref=value 类型的结尾,因此您当前的正则表达式将无济于事。

你可以使用

=ARRAYFORMULA(IF(ISBLANK(B2:B),"",CONCAT(REGEXREPLACE(B2:B, "(/[^/]+)(?:/(?:\?|ref=)[^/]*)?$", "$1/"),"?tag=ukos-20")))

请注意,这将删除 URL 末尾的查询字符串和 reg=... 字符串,并附加硬编码的字符串。

正则表达式匹配

  • (/[^/]+) - /,然后是除 / 之外的 1+ 个字符,并将结果放入第 1 组
  • (?:/(?:\?|ref=)[^/]*)? - 一个可选组(匹配 1 或 0 次)匹配:
    • / - 一个/
    • (?:\?|ref=) - ?ref=
    • [^/]* - 除/ 之外的 0+ 个字符
  • $ - 字符串结束。

$1/ 将替换为第 1 组的内容并附加 /

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 2020-05-21
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2023-02-01
    相关资源
    最近更新 更多