如何使用不止一次出现的特定字符从右向左从单元格中提取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))
在以下情况下提供正确的结果:
- 要检索的子string不超过99个字符。
- 要检索的子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中没有“/”,则会发生错误