替换当前单元格中的文本中的子字符串?

时间:2016-04-05 17:08:19

标签: google-sheets

我有一张Google表格。我想查看每个单元格中的文本,这是由斜杠分隔的两个选项,如下所示:

Yes / No

或者可能有两个原因然后用另一个斜线分隔一个解释,如:

Yes / Yes / Reasons for the answer

我希望在第一个斜杠后删除所有内容,保留第二个斜杠,然后保留所有内容(如果存在)。

最好的方法是什么?我想我想使用REGEXPREPLACE,我可能想要这样的东西:

=REGEXPREPLACE($currentcell, "\/.*[\/|$]", "")

但有两件事:

  1. 我不太确定如何在不创建循环引用的情况下获取当前单元格的值
  2. 我不确定如何为“第二个斜杠或字符串的结尾”创建一个正则表达式,尝试[\/|$]但不确定这是否正确。
  3. 更新:(2)可能很棘手。 REGEXPREPLACE似乎并不能满足我的需求。 REGEXEXTRACT也没有。嗯。

2 个答案:

答案 0 :(得分:1)

如果我理解你,你需要转换:

Yes / No → Yes
Yes / Yes / Reasons for the answer → Yes / Reasons for the answer
No / Yes / Reasons for the answer → No / Reasons for the answer

以下是migth帮助的公式:

=SUBSTITUTE(A1,CONCATENATE(REGEXEXTRACT(A1,".+(\/.+)\/.+|(\/.+)")),"")

此公式中使用的正则表达式查找第一个斜杠和最多第二个斜杠,或者唯一的斜杠和前导符号。 CONCATENATE用于组合字符串,例如使用substituteREGEXREPLACE也可以运作:

=REGEXREPLACE(A1,CONCATENATE(REGEXEXTRACT(A1,".+(\/.+)\/.+|(\/.+)")),"")

如果这不起作用,请提供更多关于您想要的结果的示例。也有可能有更优雅的解决方案。

答案 1 :(得分:0)

您也可以使用"或"来简化它。正则表达式中的条件:

=CONCATENATE(REGEXEXTRACT(A1,"(^.*\/).*\/(.*$)|(^.*)\/.*$"))

注意:您希望较长的选项成为检查的第一个条件,否则较短的选项将始终为真。