如何在LibreOffice或Google Sheets中提取::分隔分类的最后一项?
在LibreOffice/Google Sheets中提取多级分类的最后一项
针对用::分隔的多级分类数据,要提取最后一项,除了你尝试的统计最后::位置结合RIGHT的方法,还有更简洁的正则方案,同时也可以优化你原来的思路,以下是具体实现:
Google Sheets 解决方案
方法1:正则提取(最简洁)
直接用REGEXEXTRACT函数匹配字符串末尾的内容,无需计算分隔符位置:
=REGEXEXTRACT(A1, "[^::]+$")
- 原理:
[^::]+匹配任意不包含:的连续字符,$限定匹配范围为字符串末尾,自动提取最后一个::之后的内容,适配1-5级所有层级。
方法2:优化你原有的思路
如果你偏好使用RIGHT函数,可通过替换最后一个::来定位截取起点:
=RIGHT(A1, LEN(A1) - FIND("@", SUBSTITUTE(A1, "::", "@", LEN(A1)-LEN(SUBSTITUTE(A1, "::", "")))))
- 原理:先通过
LEN(A1)-LEN(SUBSTITUTE(A1, "::", ""))统计::的总出现次数,再用SUBSTITUTE把最后一个::替换成特殊字符@,最后用FIND找到@的位置,通过RIGHT截取后续内容。
LibreOffice Calc 解决方案
方法1:正则提取
LibreOffice支持REGEX函数,用法和Google Sheets类似:
=REGEX(A1, "([^::]+)$", "$1")
- 原理和上方正则方法一致,直接提取末尾非
::的内容,适用于所有层级。
方法2:兼容原思路的截取方案
同样可以使用替换+截取的逻辑,公式和Google Sheets通用:
=RIGHT(A1, LEN(A1) - FIND("@", SUBSTITUTE(A1, "::", "@", LEN(A1)-LEN(SUBSTITUTE(A1, "::", "")))))
内容的提问来源于stack exchange,提问作者Amanda
相关产品推荐
相关产品推荐

