如何在 LibreOffice Calc 中获取字符的最后位置

问题描述 投票:0回答:3

我想从 LibreOffice Calc 中多次出现的字符中获取最后一次出现的位置。

例如我有一根绳子

abc1ba2ac2adeaa43add
。现在,如果我搜索
a
,它应该返回 18。

libreoffice-calc lastindexof
3个回答
3
投票

使用正则表达式:

=SEARCH("a[^a]*$"; CELL)

要搜索除 a 之外的其他字符,只需将两个 a 替换为您要搜索的字符即可。


2
投票

这是我最近制作的一个 - 它在不使用正则表达式的情况下回答了问题(由于某种原因,我无法使用 libreoffice 4.3.1.2)

=FIND("+|",SUBSTITUTE(A1,"a","+|",(LEN(A1)-LEN(SUBSTITUTE(A1,"a","")))))

基本上,它执行以下操作:

  1. 用标记替换特定搜索字符串的最后一个实例

    替代( A1、“a”、“+|”、 (LEN(A1)-LEN(替换(A1,"a","")))) )

  2. 找到标记的索引

    查找(“+|”,...)

- 或返回 'a' 右侧的字符串 -

=MID(A1, FIND("+|",SUBSTITUTE(A1,"a","+|", (LEN(A1)-LEN(SUBSTITUTE(A1,"a","")))))+1, LEN(A1))

在此示例中,“a”是您要查找的字符串的最后一个实例,“+|”是您正在搜索的字符串中不得存在的占位符

调用 mid 会返回指定字符串后面的所有内容


0
投票

这是一个可以与 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
© www.soinside.com 2019 - 2024. All rights reserved.