LibreOffice Calc »regex« 函数——哪种正则表达式格式适用?

LibreOffice Calc »regex« 函数——哪种正则表达式格式适用?

我想在句子中查找像 DOI 这样的字符串,并在单元格中提取结果。我在 LibreOffice Calc(当前版本 6.2.4.2)中找到了 »regex« 函数,它告诉我它可以完全按照我的要求执行。

例子:

Foo bar doi: 10.1016/j.cmpb.2018.09.006 baar foooo

我在 python 中的正则表达式是: \b(10[.][0-9]{4,}(?:[.][0-9]+)*\/(?:(?![\"&\'<>])\S)+)\b 并且在 python 脚本中非常适合我(它完全匹配 doi 编号,而不需要 »doi« 字符串,这是有意为之)。

但是 »regex« 函数拒绝了这个正则表达式。文档中提到了 ICU 正则表达式,与我的正则表达式相比,我没有发现任何问题。

我是否遗漏了什么?哪种 »regex 方言« 适用于 LibreOffice?

答案1

在列表中常用表达LibreOffice 支持大多数标准表达式,但缺少您使用的两个元素:

  1. 用于?:非捕获组;
  2. 用于?!负面前瞻。

                      1              1  2
                      |              |  |
                      v              v  v
    \b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?!["&'<>])\S)+)\b
    

我不知道这代表什么级别的 RE(它似乎是带有附加功能的 BRE),但这意味着你的 RE 将与你的测试字符串不匹配。

目前尚不清楚您的字符串中有多少构成了您要隔离的数字,因此我无法建议您如何避免不受支持的元素,但有以下几种可能性:-

  • doi:如果您需要和之间的数字字符串/,那么更简单的\b10[.][0-9]{4,}(?:[.][0-9]+)*就足够了。
  • 如果您需要doi:和下一个空格之间的所有内容,那么您可以使用\b10[.][0-9]{4,}(?:[.][0-9]+)*[^\s]*

(第二种情况与你的 RE 相同正则表达式

我意识到您的实时数据可能存在更多必须捕获的异常,但如果不完全了解您的数据和您尝试匹配的数字,我就无法做更多的事情。

相关内容