我想从 LibreOffice Calc 中多次出现的字符中获取最后一次出现的位置。
例如我有一根绳子
abc1ba2ac2adeaa43add
。现在,如果我搜索 a
,它应该返回 18。
使用正则表达式:
=SEARCH("a[^a]*$"; CELL)
要搜索除 a 之外的其他字符,只需将两个 a 替换为您要搜索的字符即可。
这是我最近制作的一个 - 它在不使用正则表达式的情况下回答了问题(由于某种原因,我无法使用 libreoffice 4.3.1.2)
=FIND("+|",SUBSTITUTE(A1,"a","+|",(LEN(A1)-LEN(SUBSTITUTE(A1,"a","")))))
基本上,它执行以下操作:
用标记替换特定搜索字符串的最后一个实例
替代( A1、“a”、“+|”、 (LEN(A1)-LEN(替换(A1,"a","")))) )
找到标记的索引
查找(“+|”,...)
- 或返回 'a' 右侧的字符串 -
=MID(A1, FIND("+|",SUBSTITUTE(A1,"a","+|", (LEN(A1)-LEN(SUBSTITUTE(A1,"a","")))))+1, LEN(A1))
在此示例中,“a”是您要查找的字符串的最后一个实例,“+|”是您正在搜索的字符串中不得存在的占位符
调用 mid 会返回指定字符串后面的所有内容
这是一个可以与 LibreCalc 一起使用的正则表达式解决方案:
=LEN(<CELL>) - LEN(REGEX(<CELL>, "<CHAR>[^<CHAR>]*$")) + 1
它将使用
REGEX
函数获取 <CHAR>
中最后一次出现 <CELL>
之后的所有文本,并从整个字符串的长度中减去其长度。
直接复制/粘贴:
=LEN("abc1ba2ac2adeaa43add") - LEN(REGEX("abc1ba2ac2adeaa43add", "a[^a]*$")) + 1
这是一个还支持术语/单词而不是单个字符的解决方案:
=LEN(<CELL>) - LEN(REGEX(<CELL>, <TERM> & "(?![\s\S]*" & <TERM> & ").*")) + 1
或者直接复制/粘贴,术语
ad
在示例字符串中出现两次:
=LEN("abc1ba2ac2adeaa43add") - LEN(REGEX("abc1ba2ac2adeaa43add", "ad" & "(?![\s\S]*" & "ad" & ").*")) + 1