问题描述
我有包含地址的字符串,这些部分用逗号分隔。
洛克斯布鲁克校区外(巴斯温泉大学)洛克斯布鲁克路,巴斯,CB1 3QQ,位于 D19 牢房内
我想从这个字符串中提取城市名称,即“Bath”。城市名称总是放在邮政编码之前。
我已经通过 2 个步骤进行了处理。首先,我提取了最后一个逗号之前的所有内容,如下所示:
Excel IF statement for trim function
=MID(D19,1,FIND("@",SUBSTITUTE(D19,","@",LEN(D19)-LEN(SUBSTITUTE(D19,"")))))
这给了我:
洛克斯布鲁克校区外(巴斯温泉大学)洛克斯布鲁克路,巴斯,
=TRIM(RIGHT(SUBSTITUTE(AA5," ",REPT(" ",100)),100))
这给了我最终的结果:
浴缸,
但是,我想只用 1 个操作来完成。
有可能吗?
我在这里找到了一些公式,它应该从字符串中提取任何单词(第 n 个单词),但遗憾的是,它在我的情况下不起作用。
https://exceljet.net/formula/extract-nth-word-from-text-string
=TRIM(MID(SUBSTITUTE(D19,LEN(D19))),(N-1)*LEN(D19)+1,LEN(D19)))
它终于给了我 #NAME?
。
此外,我有疑虑,当地址字符串略有不同时,它会不起作用,包含更多元素,如街区名称、街道名称、城市、邮政编码或仅街道名称、城市和邮政编码。
>有没有办法只从字符串中最后一个逗号之前(在最后一个逗号之后)中提取一个部分?
解决方法
你可以试试:
=FILTERXML("<t><s>"&SUBSTITUTE(D19,","</s><s>")&"</s></t>","//s[position()=last()-1]")
xpath 表达式 //s[position()=last()-1]
告诉函数返回按位置索引倒数第二个的 s 节点。
有关 FILTERXML()
和使用一些 xpath 返回感兴趣的子字符串的更多信息,您可能会发现 this 很有趣。
你可以试试这个:
=MID(A2,SEARCH(",A2) + 1,A2,A2)+1) - SEARCH(",A2) - 1)
从这里:https://www.ablebits.com/office-addins-blog/2016/06/01/split-text-string-excel/