如何使用不止一次出现的特定字符从右向左从单元格中提取string?

通常情况下,我只是在Excel中使用RIGHT函数来寻找一个特定的字符,如/和输出我想要的string。

但是,我发现麻烦从d/aaa/THISSTRING.txt提取d/aaa/THISSTRING.txt 。 只有一个/我会使用一个函数,例如=RIGHT(B17,LEN(B17) - FIND("/",B17))

在这里输入图像说明

目标:在目标string中出现多次的最后一个字符后,从目标string返回最右边的子string。

这个公式:

 =TRIM(RIGHT(SUBSTITUTE(A1,"/",REPT(" ",99)),99)) 

在以下情况下提供正确的结果:

  1. 要检索的子string不超过99个字符。
  2. 要检索的子string不能包含多个空格字符。

示例: 检索长度为123字符并包含以下字符的子string 1 ABC XXX 123 XYZ

通过使用string的长度而不是固定的数字来轻松解决点1

 =TRIM(RIGHT(SUBSTITUTE(A1,"/",REPT(" ",LEN(A1))), LEN(A1))) 

然而,第二不能用所提到的公式来克服。

build议的解决scheme:无论上述情况如何,下面的公式都会返回正确的结果:

 =RIGHT(A1, LEN(A1) - FIND( CHAR(12), SUBSTITUTE(A1, "/", CHAR(12), LEN(A1) - LEN( SUBSTITUTE(A1, "/", "" ))))) 

注意:我使用不可能在excel中find的非打印字符12,根据需要更改。

这里有一个方法来获得最右边的:

 =TRIM(RIGHT(SUBSTITUTE(A1,"/",REPT(" ",99)),99)) 

这是另一种方式…..

=REPLACE(B17,1,LOOKUP(2^15,FIND("/",B17,ROW(INDIRECT("1:"&LEN(B17))))),"")

FIND生成一个数值数组,表示B17 “/”的第一个位置,但是每次起始点递增1,这意味着该数组中的最后一个数值是最后一个“/”的位置。

LOOKUP从数组中提取这个值,我们可以在REPLACE函数中使用它来replace之前和之前的所有字符,只剩下最后一个“/”之后的所有字符,

如果B17中没有“/”,则会发生错误