【问题标题】:How do I substitute based on character and position in word如何根据单词中的字符和位置进行替换
【发布时间】:2023-01-19 23:34:15
【问题描述】:

我每个单元格一个字。我需要根据一系列条件用其他字符替换字符,如下所示。

条件 1 - 如果单词包含 'l',将其加倍为 'll'。 条件 2 - 如果单词中的第一个元音是“e”,则在说“e”之后用撇号拆分单词。 条件 3 - 每个单词的最后一个元音变成“i”。 条件 4 - 如果单词以 'a'、'e'、'i'、'o' 结尾,则在末尾添加一个 m。

理想情况下,我希望它们都在一个公式中工作,但每个单独工作就足够了。我可以在一个单元格到另一个单元格的链条中应用。

条件 1 - SUBSTITUTE(SUBSTITUTE(E2,"l","ll"),"L","Ll") 这是成功的。

条件 2 - SUBSTITUTE("e","e'",1) 适用于每个“e”,而不仅仅是当它是单词中的第一个元音时。

这些一起工作 =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(E2,"l","ll"),"L","Ll"),"e","e'",1)

条件 3 - 没有当前公式

条件 4 - IF(RIGHT(TRIM(F2),1)="a",F2&"m",F2&"") 适用于单个字母(在本例中为“a”),但不适用于所有必需的字母。

【问题讨论】:

  • edit 您的问题,并在您手动输入的所需结果旁边插入 table 样本数据。还可以考虑共享一个可公开编辑的示例电子表格。有一个blank sheet maker 可以让你安全地分享。

标签: google-sheets conditional-statements character substitution


【解决方案1】:

使用regexreplace(),像这样:

=lambda(
  data, regexes, replaceWith, 
  byrow( 
    data, 
    lambda( 
      word, 
      if( 
        len(word), 
        reduce( 
          trim(word), sequence(counta(regexes)), 
          lambda( 
            acc, regexIndex, 
            regexreplace( 
              acc, 
              "(?i)" & index(regexes, regexIndex), 
              index(replaceWith, regexIndex) 
            ) 
          ) 
        ), 
        iferror(1/0)  
      ) 
    ) 
  ) 
)( 
  A2:A10, 
  { "l", "^([^aeiou]*)(e)", "[aeiou]([^aeiou]*)$", "([aeio])$" }, 
  { "ll", "$1e-", "i$1", "$1m" }  
)

该公式将只处理小写字母,因为这是问题指定的内容。要同时替换大写字母,请在第一个 index() 前加上 "(?i)" & 。请注意,不会保留大小写。

【讨论】:

    猜你喜欢
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2013-07-08
    • 2013-11-29
    相关资源
    最近更新 更多