8

我在开放式办公室有一个专栏,如下所示:

abc-23

abc-32

abc-1

现在,我只需要使用 calc 中的公式和正则表达式来获得数字 23、32 和 1 的总和。我怎么做?

我试过

=SUMIF(F7:F16,"([:digit:].)$")

但不知何故,这不起作用。

4

6 回答 6

6

从 LibreOffice 6.4 开始,您可以使用新添加的REGEX 函数通过正则表达式从单元格/文本中提取所有数字:

=REGEX(A1;"[^[:digit:]]";"";"g")

替换A1为要从中提取数字的单元格引用。

REGEX函数参数说明:

参数用分号隔开;

  1. A1:从中提取数字的值。可以是单元格引用 (like A1) 或引用的文本值 (like "123abc")。以下正则表达式将应用于此单元格/文本。
  2. "[^[:digit:]]": 匹配每一个不是十进制数字的字符。另请参阅LibreOffice 中的正则表达式列表
    • 外部方括号[]封装了要搜索的字符列表
    • ^添加一个NOT ,表示搜索列表中包含的每个字符都匹配
    • [:digit:]代表任何十进制数字
  3. "": 用空替换匹配的字符(每个非数字)=删除它们
  4. "g": 替换所有匹配项(不要在第一个非数字字符后停止)
于 2020-08-27T10:03:07.503 回答
1

不幸的是,Libre-Office 仅在查找/替换和搜索中支持正则表达式。如果这是一次性交易,我会将 A 列复制到 B 列,然后在 B 中使用 [data] [text to columns] 并使用 - 作为分隔符,将 B 列中的所有文本和C列中的数字。

或者,您可以在 B 列中使用 =Right(A1,find("-",A1,1)+1),然后对 C 列求和。

于 2012-11-10T15:12:41.757 回答
1

我认为这并不完全是您想要的,但也许它可以帮助您或其他人。

这一切都是关于substring(在Calc被调用的[MID][1]函数中):

首先:选择您的单元格(例如带有“ abc-23”内容)。

其次:输入起始长度(" british" --> start length 4 = tish)。

之后:要打印所有剩余的文本,您可以在参数中使用[LEN][2]带有单元格(“”)的函数(称为长度)abc-23。代码现在看起来像这样:

D15="abc-23"
=MID(D15; 5; LEN(D15))

输出是:23

当您编辑数字时(在此示例中为 23),没问题。但是,如果您在之前更改任何内容(文本“ abc-”),算法就会崩溃,因为开始长度被定义为“5”。

于 2015-10-26T17:46:41.157 回答
1

将字符串粘贴到单元格中,打开搜索和替换对话框 (ctrl + f) 扩展搜索选项标记正则表达式搜索 ([\s,0-9])([^0-9\s])+ 并将其替换为1美元

根据您的需要调整正则表达式

于 2016-12-01T12:42:43.227 回答
0

我没有弄清楚如何直接在 OpenOffice/LibreOffice 中执行此操作。在网上搜索和尝试各种公式时遇到挫折后,我意识到我的工作表是一个简单的 CSV 格式,所以我在 vim 中打开它,并使用 vim 内置的类似 sed 的功能在 vim 命令模式下查找/替换文本:

:%s/abc-//g

这仅对我有用,因为没有其他列具有此匹配文本。如果有其他列具有相同的文本,那么解决方案会更复杂一些。

如果您的工作表不是 CSV,您可以将列复制到文本文件并使用 vim 查找/替换,然后将数据粘贴回电子表格。对我来说,这比试图在 LibreOffice 中解决这个问题更令人沮丧……

于 2021-09-03T04:50:09.263 回答
-4

在不知道是否真的有兴趣的情况下,我不会为解决方案而烦恼,但是,您可以编写一个宏来执行此操作。提取所有数字,然后通过检查文本中包含的数字来实现总和。

于 2015-10-29T14:03:38.360 回答