LibreOffice Calc »regex« 函數 – 哪一種正規表示式格式適用?

LibreOffice Calc »regex« 函數 – 哪一種正規表示式格式適用?

我想在句子中找到類似 DOI 的字串,並將結果提取到單元格中。我在 LibreOffice Calc(目前版本 6.2.4.2)中找到了「regex」函數,它告訴我它完全可以執行我想要的操作。

例子:

Foo 酒吧 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 正規表示式,與我的正規表示式相比,我找不到任何問題。

我錯過了什麼嗎?哪一種「正規表示式方言」適用於 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 上的匹配相同正規表示式.)

我意識到您的即時數據可能有更多必須捕獲的異常,但如果不完全了解您的數據和您嘗試匹配的數字,我無法做更多的事情。

相關內容