查找第二次出现分隔符后的子字符串

查找第二次出现分隔符后的子字符串

我正在寻找一个公式来帮助查找某个分隔符第二次出现后的子字符串。例如,在下面的字符串中,我想要第二个破折号“-”之后的子字符串,即 Ccc。您能建议我该怎么做吗?

Aaa-Bbb-加拿大-Ddd

答案1

Werrf 和 Zac67 都说对了。如果你不知道这段有多长ccc,那么你需要找到第二段第三次冲刺。

=LET(dash2,FIND("|",SUBSTITUTE(A1,"-","|",2)),dash3,FIND("|",SUBSTITUTE(A1,"-","|",3)),MID(A1,dash2+1,dash3-dash2-1))

这看起来很长,但并不复杂。该函数允许您定义变量并在以后按名称引用它们。除了最后一个项(即输出)外,LET()所有项都是成对出现的( )。以下按顺序列出了这些项:variable, value

  • dash2,FIND("|",SUBSTITUTE(A1,"-","|",2))就像 Werrf 提供的查找第二个破折号的方法一样。重要的是要保证替换字符不会出现在字符串中。Werrf 和我都使用竖线,|因为它在普通文本中很少使用。
  • dash3,FIND("|",SUBSTITUTE(A1,"-","|",3))除了找到第三个管道外,其他都完全相同。FIND("-",A1,dash2+1)如果长度太长,您也可以使用替代项,但我喜欢保持它们相同。
  • MID(A1,dash2+1,dash3-dash2-1)根据找到第二条破折号的位置以及第二条和第三条破折号之间的距离提取文本的中间部分。

如果您发现更改所有A1引用很烦人,您可以将其指定为第一个变量:

=LET(a,A1,dash2,FIND("|",SUBSTITUTE(a,"-","|",2)),dash3,FIND("|",SUBSTITUTE(a,"-","|",3)),MID(a,dash2+1,dash3-dash2-1))

或者

=LET(a,A1,dash2,FIND("|",SUBSTITUTE(a,"-","|",2)),dash3,FIND("-",a,dash2+1),MID(a,dash2+1,dash3-dash2-1))

答案2

使用SUBSTITUTE函数替换您要查找的分隔符。SUBSTITUTE允许您搜索特定字符并将其替换为另一个字符;至关重要的是,您还可以指定要替换的字符的出现位置。我们将使用它来将第二个分隔符替换为另一个字符,然后我们可以搜索 - 我喜欢使用管道|。假设您要检查的字符串在 A1 中,请使用:

SUBSTITUTE(A1,"-","|",2)

这将返回 Aaa-Bbb|Ccc-Ddd。然后您可以使用MIDFINDSEARCH来返回字符串的其余部分:

=MID(A1,FIND("|",SUBSTITUTE(A1,"-","|",2)),LEN(A1))

这将返回:-Ccc-Ddd

答案3

如果您不知道分隔部分的长度,则需要嵌套多个search()函数:

=search("-",haystack,search("-",haystack)+1)+1

告诉您第二个“-”后的起始索引。

答案4

尝试这个公式:

=MID(A1,FIND("-",A1,FIND("-",A1,1)+1)+1,FIND("-",SUBSTITUTE(A1,"-",1,1))-FIND("-",A1)-1)

在此处输入图片描述

相关内容